java - 程序的 MySQL boolean 输入未按预期工作

标签 java mysql boolean

我有一个需要一个 boolean 输入的过程:

 `get_storage_choices_expanded`(IN usage_total INT(11), IN no_request1 INT(8), IN no_request2 INT(8), IN reduced_redundancy_storage boolean)

但是当我这样使用它时:

call get_storage_choices_expanded(10,1,2,true);
select * from storage_choices_expanded
;

生成的结果与我测试过的相同选择查询不匹配。例如

(select *, 
    usage_each_plan * if(true,reduced_redundancy_storage, standard_storage) as price_storage, 
    concat_ws(' ',`Provider Name`,`Name`,`region_name`) as group_name,
    1 * request_group1_unit as "Number of Type1 Requests",
    2 * request_group2_unit as "Number of Type2 Requests",
    (1 * request_group1_price) as price_request1,
    (2 * request_group2_price) as price_request2
from 
  (SELECT *, 
    ( if((quota_band_high is not NULL) and 10>quota_band_high, quota_band_high, 10) - quota_band_low) as usage_each_plan
  FROM `cloud`.`storage_service_price`
  where 10 > quota_band_low and reduced_redundancy_storage > if(true,0, -1)
  ) as storage_usage_each_plan
)

完整代码如下:

    -- --------------------------------------------------------------------------------
    -- Routine DDL
    -- --------------------------------------------------------------------------------
    DELIMITER $$

    CREATE DEFINER=`root`@`localhost` PROCEDURE `get_storage_choices_expanded`(IN usage_total INT(11), IN no_request1 INT(8), IN no_request2 INT(8), IN reduced_redundancy_storage boolean)
    BEGIN

    drop table if exists `cloud`.`storage_choices_expanded`;
    CREATE TEMPORARY TABLE `cloud`.`storage_choices_expanded` AS

      (select *, 
          usage_each_plan * if(reduced_redundancy_storage,reduced_redundancy_storage, standard_storage) as price_storage, 
          concat_ws(' ',`Provider Name`,`Name`,`region_name`) as group_name,
          no_request1 * request_group1_unit as "Number of Type1 Requests",
          no_request2 * request_group2_unit as "Number of Type2 Requests",
          (no_request1 * request_group1_price) as price_request1,
          (no_request2 * request_group2_price) as price_request2
      from 
        (SELECT *, 
          ( if((quota_band_high is not NULL) and usage_total>quota_band_high, quota_band_high, usage_total) - quota_band_low) as usage_each_plan
        FROM `cloud`.`storage_service_price`
        where usage_total > quota_band_low and reduced_redundancy_storage > if(reduced_redundancy_storage,0, -1)
        ) as storage_usage_each_plan
      ) 


    ;
    END

我尝试用 bool、bit、TINYINT(1) 替换 boolean,但似乎没有任何区别。

程序可以调用并运行,没有错误,但结果错误。 调用过程返回 reduced_redundancy_storage 值 == 0 的行,这是不正确的,因为它应该是 >0

最佳答案

我认为这里的问题是您在存储过程中定义了一个与数据库中存在的字段同名的参数。检查是否存在名为“reduced_redundancy_storage”的字段。

关于java - 程序的 MySQL boolean 输入未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8721823/

相关文章:

JavaFX 和 Swing 颜色不匹配

android - 使用 MySQL 数据库开发 Android 应用程序?

python - Pandas :用 boolean 值替换会产生不一致的结果

java - Java 中微分方程组的 Runge-Kutta (RK4)

java - Z3 for Java 中关于 check() 的性能

c# - 如何使用 MySQL 查询将组合框的所有项目发送到 SQL DB

php - 如何使用$_SESSION从数据库中获取信息?

C99 - 为什么 false 和 true 定义为 0 和 1 而不是 ((bool)0) 和 ((bool)1)?

python - 集合的 all() 方法的逻辑

Java Keystore - 从 PKS 文件导入现有通配符证书