1

在 SQL Developer 中,当运行一些 PL/SQL 时,当程序完成时,会提示“PL/SQL 程序成功完成”。被退回。

如果由于任何原因无法通过 DBMS_OUTPUT.PUT_LINE 完成操作,正在运行的 PL/SQL 可能会向用户返回错误消息,但是,用户也会看到“PL/SQL 过程已成功完成。”,这可能会产生误导(特别是如果脚本输出窗口足够小以至于 DBMS_OUTPUT 不可见)。

有没有办法让 DBMS_OUTPUT 返回它应该返回的内容,同时让脚本不返回“PL/SQL 过程成功完成。”?

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

declare 

    testex exception;

begin

    if 1=1 then 
        raise testex;
    end if;

exception when testex then

    dbms_output.put_line('Error msg');

end;
4

3 回答 3

6

下面的代码对我有用。您是否尝试像下面那样运行您的代码?

在此处输入图像描述

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

源码链接:https ://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12040.htm

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

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

SET FEEDBACK OFF 还会关闭在 SQL 或 PL/SQL 语句成功后显示的语句确认消息,例如“表已创建”和“PL/SQL 过程成功完成”。

于 2018-03-29T12:14:47.750 回答
1

在错误处理程序中添加一条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;

祝你好运。

于 2018-03-29T11:46:19.297 回答
1

您已对其进行显式编码以在发生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

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

它还将回滚块内的任何未提交的事务,而您当前的方法不会,它会显示实际的行号。

于 2018-03-30T12:14:04.380 回答