2012-09-08 4 views
10

Tengo un procedimiento almacenado PL/SQL dentro del cual quiero ejecutar varias actualizaciones, luego capturar las excepciones y devolverlas en un parámetro de salida. Para simplificar, en el siguiente bloque de código, simplemente estoy enviando el código de excepción y el mensaje de error a la consola. Sin embargo, el bloque de código siguiente no funciona (estoy experimentando una "esperando encontrado /" error de sintaxis)Cómo capturar y devolver (o imprimir) una excepción en un ORACLE PL/SQL crear o reemplazar un procedimiento almacenado

CREATE OR REPLACE PROCEDURE DBP.TESTING_SP AS 
    DECLARE 
    v_code NUMBER; 
    v_errm VARCHAR2(64); 
    BEGIN 
    UPDATE PS_NE_PHONE_TBL SET NE_PHONE_TYPE = 'TEST' WHERE NEMPLID_TBL = 'N14924'; 

    EXCEPTION 
    WHEN OTHERS THEN 
    v_code := SQLCODE; 
    v_errm := SUBSTR(SQLERRM, 1, 64); 
    DBMS_OUTPUT.PUT_LINE (v_code || ' ' || v_errm); 
    END TESTING_SP; 
    /

¿Cuál es la sintaxis correcta para lo que yo estoy tratando de hacer?

leí en un foro

"Al utilizar la sintaxis crear o sustituir, no se puede utilizar Declare. Declare es sólo para los bloques anónimos que no se nombran. Así que, o quitar la línea 1 y crear un anónimo bloquear o eliminar la línea 2 y crear un procedimiento con nombre ".

pero no estoy seguro de cómo crear un bloque anónimo o crear un procedimiento con nombre para lograr lo que quiero hacer (si eso, de hecho, es la 'solución'). ¿Podría alguien echar una mano?

+0

A menos que esté haciendo algo útil con la información de excepción, no hay necesidad de atraparlo. La mejor manera de pasar información de excepción a la función de llamada es no hacer nada, y dejar que la excepción aumente naturalmente. Esto utiliza menos código y conserva el número de línea real del error. –

Respuesta

5

Simplemente elimine la declaración DECLARAR.

+0

increíble, gracias! ¿podría explicar por qué no necesito la declaración de declaración en este caso (donde como todos los ejemplos que vi tienen la declaración de declaración)? – n00b

+2

DECLARACIÓN es para un bloque anónimo. Si está creando un procedimiento que puede llamarse por nombre, use la sintaxis CREAR O SUSTITUIR PROCEDIMIENTO. Se ejecuta un bloque anónimo cada vez que desea ejecutar el procedimiento. – DCookie

Cuestiones relacionadas