如何在ORACLE PL/SQL中捕获并返回(或打印)异常创建或替换存储过程

n00*_*00b 11 oracle plsql stored-procedures

我有一个PL/SQL存储过程,我想在其中运行多个更新,然后捕获任何异常并将它们返回到out参数中.为简单起见,在下面的代码块中,我只是将异常代码和错误消息输出到控制台.但是,下面的代码块不起作用(我遇到"发现/期待"语法错误)

    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;
    /
Run Code Online (Sandbox Code Playgroud)

我正在尝试做什么的正确语法是什么?

我在一个论坛上看过

"当使用Create或Replace语法时,不能使用Declare.声明仅适用于未命名的匿名块.因此,要么删除第1行并创建匿名块,要么删除第2行并创建命名过程."

但我不确定如何创建一个匿名块或创建一个命名过程来完成我想要做的事情(如果那确实是'解决方案').有人能伸出援助之手吗?

DCo*_*kie 6

只需删除DECLARE语句即可.

  • DECLARE用于匿名块.如果要创建可以按名称调用的过程,请使用CREATE OR REPLACE PROCEDURE语法.每次要执行过程时都会运行匿名块. (2认同)