2017-10-11 14 views
0

J'ai une procédure qui jette cette exceptionGestion des erreurs PL/SQL: Intercepter une exception et ne jetez pas

error_stack -> ORA-00030: El identificador de sesión del usuario no existe. 
error_backtrace -> ORA-06512: en "OF_OWNER.GET_INVOICES", línea 46 
call_stack -> ----- PL/SQL Call Stack ----- 
    object  line object 
    handle number name 
00000010DB020548  59 procedure OF_OWNER.GET_INVOICES 
000000112A537E58   2 anonymous block 

Mais je ne veux pas la procédure de soulever une exception dans ce cas, je « ai essayé

... 
WHEN 'ORA-00030' THEN 
WHEN OTHERS 
... 

Mais je suis une erreur de compilation

+1

essayer cette \t 'exception QUAND LES AUTRES ALORS SI SQLCODE = -00030THEN \t \t \t \t \t \t \t DBMS_OUTPUT.PUT_LINE (​​'Il y a une erreur');' – Moudiz

+0

Out! de la curiosité - pourquoi voulez-vous ignorer cette erreur? Cela n'a aucun sens - si votre procédure ne provoque pas d'erreur, quelque chose d'autre va certainement se casser, puisque la session n'existe plus. –

Répondre

2

Soit:

BEGIN 
    do something 
EXCEPTION WHEN OTHERS THEN 
    IF SQLCODE = -30 THEN 
    NULL; -- ignore this particular exception 
    ELSE 
    RAISE; -- but throw the others 
    END IF; 
END; 

Ou:

DECLARE 
    ORA00030 EXCEPTION; -- or any other name you like instead of ORA00030 
    pragma EXCEPTION_INIT(ORA00030, -30); -- link your exception name to the code 
BEGIN 
    do something 
EXCEPTION WHEN ORA00030 THEN 
    NULL; -- ignore this particular exception 
END;