Java 过程的MySQL布尔输入未按预期工作
我有一个接受一个布尔输入的过程:Java 过程的MySQL布尔输入未按预期工作,java,mysql,boolean,Java,Mysql,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_e
`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查询不匹配。e、 g
(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\u redundancy\u storage
value==0,这是不正确的,因为它应该是>0我认为这里的问题是您在存储过程中定义了一个参数,该参数与数据库中存在的字段同名。检查是否存在名为“精简冗余存储”的字段两个输出之间的区别是什么?表中是否有名为“精简冗余存储”的字段?除了在过程中定义的参数之外。