在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;
答案 0 :(得分:4)
下面的代码适用于我。您是否尝试过像下面那样运行代码?
从网站复制文字以解释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
这将导致实际错误,而不仅仅是打印出发生错误的消息,允许您控制部署和构建脚本等。
它还会回滚块中的任何未提交的事务,而当前的方法不会,它将显示实际的行号。