代码之家  ›  专栏  ›  技术社区  ›  TomB

SQL Developer DBMS\u输出不带“成功完成PL/SQL过程”

  •  1
  • TomB  · 技术社区  · 7 年前

    在SQL Developer中,当运行某些PL/SQL时,当过程完成时,会显示消息“PL/SQL过程成功完成”已返回。

    如果由于任何原因无法通过DBMS\U输出完成操作,则运行的PL/SQL可能会向用户返回错误消息。但是,用户还会看到“PL/SQL过程成功完成”,这可能会产生误导(尤其是当脚本输出窗口足够小以至于DBMS\U输出不可见时)。

    有没有办法让DBMS\U输出返回它应该返回的内容,同时让脚本不返回“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 回复  |  直到 7 年前
        1
  •  6
  •   eifla001    7 年前

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

    enter image description here

    从网站复制文本以解释“设置反馈关闭”命令。

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

    设置反馈{6 | n |开|关}- 当脚本选择至少n条记录时,显示脚本返回的记录数。

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

    关闭SET FEEDBACK(设置反馈)还会关闭在SQL或PL/SQL语句成功后显示的语句确认消息,如“Table created”(已创建表)和“PL/SQL procedure successfully completed”(成功完成PL/SQL过程)。

        2
  •  1
  •   Bob Jarvis - Слава Україні    7 年前

    添加一个 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;
    

    祝你好运。

        3
  •  1
  •   William Robertson    7 年前

    您已将其显式编码为在发生 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
    

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

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