没有'PL / SQL过程成功完成的SQL Developer DBMS_OUTPUT。'

时间:2018-03-29 11:22:53

标签: sql oracle plsql oracle-sqldeveloper dbms-output

在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;

3 个答案:

答案 0 :(得分:4)

下面的代码适用于我。您是否尝试过像下面那样运行代码?

enter image description here

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

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

SET FEED [BACK] {6 | n | ON |关闭} - 显示脚本选择至少n条记录时脚本返回的记录数。

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

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

答案 1 :(得分: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;

祝你好运。

答案 2 :(得分: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

这将导致实际错误,而不仅仅是打印出发生错误的消息,允许您控制部署和构建脚本等。

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