简体   繁体   中英

Procedure never raise NO_DATA_FOUND Exception

i've created an procedure which increases salaries of peoples working in a department by a certain rate. the department number and the rate are assed as parameters for the procedure. Now, the procedure works great when i specify the good departement number, but once i specify a false one, and i'm waiting for the NO_DATA_FOUND Exception to raise, it never happen. I searched tried many thing but didn't found the answer, so if you can help me i woul be really greatfull. Thank you ! Here is my code :

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;
SELECT sum(salaireemploye)
        INTO p_nbreTotalSalaire
        FROM employes
        WHERE numerodepartement = numDepartement;

In this query you are using SUM() . Now if there is no matching department, ie input "numDepartement" is a false department, sum(salaireemploye) is 0 (no such department, so nothing to add, so 0).

sum(salaireemploye) thus has a valid value, which is 0 here. Hence this will never raise a NO_DATA_FOUND exception

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM