SQL 开发者 DBMS_OUTPUT 没有 'PL/SQL procedure successfully completed.'

SQL Developer DBMS_OUTPUT without 'PL/SQL procedure successfully completed.'

在SQL开发者中,当运行宁一些PL/SQL,程序完成时,消息'PL/SQL procedure successfully completed.'被return编辑。

如果由于任何原因无法通过 DBMS_OUTPUT.PUT_LINE 完成操作,运行 的 PL/SQL 可能会向用户 return 错误消息,但是,用户还会看到 'PL/SQL procedure successfully completed.',这可能会产生误导(特别是如果脚本输出 window 足够小以至于 DBMS_OUTPUT 不可见)。

有什么方法可以让 DBMS_OUTPUT return 达到它应该的效果,同时让脚本不 return 'PL/SQL procedure successfully completed.'?

如果没有,SQL 开发人员中是否有任何我可能不知道的替代方案可以向用户提供即时个性化反馈?

declare 

    testex exception;

begin

    if 1=1 then 
        raise testex;
    end if;

exception when testex then

    dbms_output.put_line('Error msg');

end;

在错误处理程序中将 RAISE 语句添加到 re-raise 异常,以便任何外部处理程序都可以处理它:

declare 

    testex exception;

begin

    if 1=1 then 
        raise testex;
    end if;

exception when testex then

    dbms_output.put_line('Error msg');

    RAISE;  -- re-raise the exception to an outer handler

end;

祝你好运。

下面的代码对我有效。您是否尝试 运行 您的代码如下所示?

从网站复制文本以解释 SET FEEDBACK OFF 命令。

来源link:https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12040.htm

设置进给[返回] {6 | ñ |开 |离开} - 当脚本选择至少n条记录时,显示脚本返回的记录数。

ON 或 OFF 打开或关闭此显示。打开反馈将 n 设置为 1。将反馈设置为零相当于将其关闭。

SET FEEDBACK OFF 还会关闭在 SQL 或 PL/SQL 语句成功后显示的语句确认消息,例如 'Table created' 和 'PL/SQL procedure successfully completed'。

您已对其进行明确编码,以便在出现 testex 异常时成功完成。代码说:如果发生这种情况,则打印一条消息并结束。如果您希望它真正失败,那么它需要引发异常。

我会用这样的东西:

begin
    if 1=1 then 
        raise_application_error(-20000, 'Bananas are not available on a Tuesday');
    end if;
end;
/

begin
*
ERROR at line 1:
ORA-20000: Bananas are not available on a Tuesday
ORA-06512: at line 3

这将导致一个实际的错误,而不是仅仅打印出一条碰巧谈论错误的消息,让您可以控制部署和构建脚本等。

它还会回滚块内所有未提交的事务,而您当前的方法不会这样做,并且它会显示实际的行号。