我已经创建了一个程序,可以提高某个部门工作人员的工资。部门编号和费率作为程序的参数。 现在,当我指定好的部门编号时,程序工作得很好,但是一旦我指定了一个假部件,并且我等待NO_DATA_FOUND异常提升,它就永远不会发生。我搜索了很多东西,但没有找到答案,所以如果你能帮助我,我真的很棒。谢谢 ! 这是我的代码:
create or replace PROCEDURE AugmenteSalaire(numDepartement in departements.numerodepartement%TYPE, taux IN number) IS
p_nbreTotalSalaire employes.salaireemploye%type;
begin
SELECT sum(salaireemploye)
INTO p_nbreTotalSalaire
FROM employes
WHERE numerodepartement = numDepartement;
if taux > 0 AND taux <= 100 THEN
if p_nbreTotalSalaire < 150000 THEN
Update employes e
SET e.salaireemploye = e.salaireemploye + (e.salaireemploye * (taux * 0.01))
WHERE e.numerodepartement = numDepartement
AND NOT numeroemploye = (SELECT departements.chefdepartement from departements
WHERE departements.numerodepartement = numDepartement);
ELSE
DBMS_OUTPUT.PUT_LINE('Transaction refused : The salary sum cannot be above 150000');
END IF;
ELSE
DBMS_OUTPUT.PUT_LINE('The rate cannot be under 0 or aboce 100');
END IF;
Exception
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('The department number provided is invalid, '||
'please enter a valid department number(DEP001 for example)');
end;
答案 0 :(得分:0)
SELECT sum(salaireemploye)
INTO p_nbreTotalSalaire
FROM employes
WHERE numerodepartement = numDepartement;
在此查询中,您使用的是SUM()
。现在如果没有匹配的部门,即输入“numDepartement”是一个假部门,sum(salaireemploye)
是0(没有这样的部门,所以没有什么可以添加,所以0)。
sum(salaireemploye)
因此具有有效值,此处为0。因此,这永远不会引发NO_DATA_FOUND
异常