检查行是否被选中 PLSQL

Check if rows were selected PLSQL

好吧,我有一个程序,我将两个员工的薪水相加。我用员工的 id 得到工资。如果找不到员工,我应该将工资设置为 0。这是我的代码

    PROCEDURE private_salaries(
    sal_res OUT NUMBER,
    emp_1 NUMBER,
    emp_2 NUMBER)
IS
  sal_1 NUMBER;
  sal_2 NUMBER;
BEGIN
  SELECT salary INTO sal_1 FROM employees WHERE employee_id = emp_1;
  SELECT salary INTO sal_2 FROM employees WHERE employee_id = emp_2;
END;

程序可以简化如下,

create or replace PROCEDURE private_salaries(
    emp_1 NUMBER,
    emp_2 NUMBER,
    sal_res out NUMBER)
is 
begin 

select sal1 + sal2 into sal_res
  from
  (
  select 
  nvl((SELECT salary  FROM employees WHERE employee_id = emp_1),0) sal1,
  nvl((SELECT salary FROM employees WHERE employee_id = emp_2),0) sal2
  from dual);

end;

测试用例:

  • 当两者都存在时 - Returns工资总和
  • 当两者都不存在时 - Returns 存在者的工资
  • 当 none 个存在时 - Returns 零。

建议 - 使用函数而不是过程,您可以在 SQL 中使用它们,但是对于过程需要一个 PL/SQL 块。