sql >> Database teknologi >  >> RDS >> Oracle

PL/SQL-undtagelseshåndtering:ikke gør noget (ignorer undtagelse)

Selvom jeg er enig i, at det 99% af tiden er dårlig praksis at ignorere undtagelser uden i det mindste at logge dem et eller andet sted, er der specifikke situationer, hvor dette er helt acceptabelt.

I disse situationer er NULL din ven:

[...]
EXCEPTION

    WHEN OTHERS THEN
        NULL;
END;

To typiske situationer, hvor det kan være ønskeligt at ignorere undtagelser, er:

1) Din kode indeholder en sætning, som du ved vil fejle lejlighedsvis, og du ønsker ikke, at denne kendsgerning skal afbryde dit programflow. I dette tilfælde skal du vedlægge din sætning i en indlejret blok, som det følgende eksempel viser:

CREATE OR REPLACE PROCEDURE MY_PROCEDURE() 
IS
    l_empoyee_name  EMPLOYEES.EMPLOYEE_NAME%TYPE;
BEGIN
    -- Catch potential NO_DATA_FOUND exception and continue
    BEGIN 
        SELECT EMPLOYEE_NAME
        INTO l_empoyee_name
        FROM EMPLOYEES
        WHERE EMPLOYEE_ID = 12345;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            NULL;
        WHEN OTHERS THEN
            RAISE;
    END;

    do_stuff();

EXCEPTION

    WHEN OTHERS THEN
        -- Propagate exception
        RAISE;
END;

Bemærk, at PL/SQL generelt ikke tillader den ved fejlgenoptagelse næste type undtagelseshåndtering kendt fra Visual Basic, hvor alle undtagelser ignoreres, og programmet fortsætter med at køre, som om intet var hændt (se Ved fejl genoptage næste type fejlhåndtering i PL /SQL oracle ). Du skal eksplicit omslutte potentielt fejlende sætninger i en indlejret blok.

2) Din procedure er så ligegyldig, at ignorering af alle undtagelser, den kaster, ikke vil påvirke din hovedprogramlogik. (Dette er dog meget sjældent tilfældet og kan ofte resultere i et fejlsøgningsmareridt i det lange løb)

BEGIN

    do_stuff();

EXCEPTION

    WHEN OTHERS THEN
        -- Ignore all exceptions and return control to calling block
        NULL;
END;


  1. SQL cast datetime

  2. Indsæt i mysql fra Bash script

  3. Hvordan importerer man data fra .csv i SQL Server ved hjælp af PowerShell?

  4. Få de første tegn fra en streng