I have a PROCEDURE that takes one Boolean input:
`get_storage_choices_expanded`(IN usage_total INT(11), IN no_request1 INT(8), IN no_request2 INT(8), IN reduced_redundancy_storage boolean)
But when I use it like:
call get_storage_choices_expanded(10,1,2,true);
select * from storage_choices_expanded
;
The result produced does not match with the same select query I have tested with. 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
)
The full code is as follows:
-- --------------------------------------------------------------------------------
-- 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
I have tried to replace boolean with bool, bit, TINYINT(1), but it doesn’t seem to make any difference.
The procedure can be called and run with no error, but the results are wrong.
call procedure returned rows with reduced_redundancy_storage value == 0 which is incorrect as it should be >0
I think the issue here is you have defined a parameter in stored procedure with the same name of a field exists in the database. Check whether a field exists with the name “reduced_redundancy_storage”.