过程永远不会引发NO_DATA_FOUND异常

时间:2014-03-16 17:21:04

标签: sql plsql

我已经创建了一个程序,可以提高某个部门工作人员的工资。部门编号和费率作为程序的参数。 现在,当我指定好的部门编号时,程序工作得很好,但是一旦我指定了一个假部件,并且我等待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;

1 个答案:

答案 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异常