存储过程没有给出正确的值

Posted

技术标签:

【中文标题】存储过程没有给出正确的值【英文标题】:store procedure not giving correct values 【发布时间】:2020-07-11 20:34:54 【问题描述】:

我正在尝试使用存储过程查找具有特定工资范围的员工数量,我得到了结果,但它们不等于简单查询的结果(下面的第二个查询),这意味着存储过程不是工作正常吗?

我希望有人能帮我解决这个问题。

-- ANSWER : NULL /没有低于 38000 的工资金额,但是使用存储过程我得到 967330

其次,有没有其他方法可以缩短存储过程中的 case when 语句?在当前版本中,我每次都必须添加子查询。

数据库名称:员工 栏目名称:工资 employee_id = emp_no

DELIMITER $$
CREATE PROCEDURE SALARY_RANGE
(INOUT no_employees INT, IN salary INT)
BEGIN
CASE
WHEN (salary <= 38000) THEN (SELECT COUNT(emp_no) INTO no_employees 
                        FROM salaries 
                            WHERE salary <= 38000);
                            
WHEN (salary<= 68000) THEN (SELECT COUNT(emp_no) INTO no_employees 
                        FROM salaries
                            WHERE  salary <= 68000);
WHEN (salary <= 88000) THEN (SELECT COUNT(emp_no) INTO no_employees 
                        FROM salaries
                            WHERE  salary <= 88000);
WHEN (salary <= 100000) THEN (SELECT COUNT(emp_no) INTO no_employees 
                        FROM salaries
                            WHERE  salary <=  100000);  
ELSE (SELECT COUNT(emp_no) INTO no_employees 
FROM salaries WHERE salary > 100000);
END CASE;
END$$

CALL SALARY_RANGE(@finding_salary_range_count,'38000')$$
select @finding_salary_range_count;


-- to check the if the answer matched the above store procedure
select count(case when salary <= 88000 then emp_no else null end) as count_sal
from salaries;

【问题讨论】:

【参考方案1】:

我希望这样的代码:

CREATE PROCEDURE SALARY_RANGE (
    OUT out_num_employees INT,
    IN in_salary INT
)
BEGIN
    SELECT COUNT(emp_no) INTO out_num_employees 
    FROM salaries 
    WHERE salary <= in_salary or in_salary IS NULL
END;

我认为不需要多个 SELECT 语句。

【讨论】:

以上是关于存储过程没有给出正确的值的主要内容,如果未能解决你的问题,请参考以下文章

存储过程如果存在不给出正确答案

作为作业运行时,SSIS 变量不包含正确的值

navicat存储过程怎么判断是不是正确

Float 到 Double 的转换给出了不正确的值

为啥存储过程没有在一个字符串中给出输出并且在 MySql 6.0 上执行的存储过程在 MySql 5.0 上给出错误

参数在 ActionResult 中没有给出正确的值