【问题标题】:Why no output when PLSQL Anonymous block completes? [duplicate]为什么PL SQL匿名块完成时没有输出? [复制]
【发布时间】:2013-01-26 00:38:22
【问题描述】:

我刚刚进入 PL/SQL,我尝试运行以下代码,我得到 匿名块完成,但我认为我应该得到 测试输出。有谁知道我做错了什么?

DECLARE
   message varchar2(20) := 'Testing output';
BEGIN
   dbms_output.put_line(message);
END;
/

【问题讨论】:

  • 答案取决于您使用的客户端。 SET SERVEROUTPUT ON 对 SQL*Plus 是正确的。其他工具有自己的方法从 dbms_output 检索结果。

标签: sql oracle plsql


【解决方案1】:

查看 DBMS_OUTPUT 取决于程序。

SQL*Plus 和 Oracle SQL Developer

首先运行SET SERVEROUTPUT ON;。这就是 SQL*Plus 或最新版本的 Oracle SQL Developer 所必需的。

SET SERVEROUTPUT ON;
begin
    dbms_output.put_line('Testing output');
end;
/

PL/SQL 开发人员

输出会自动检测并显示在“输出”选项卡中。

【讨论】:

  • 感谢您的快速回复。我将 serveroutput 设置为 on 并且它工作。有没有办法可以在 sqldeveloper 中运行它?
  • 这很酷。你是从 CLI 运行的吗?是的,当我在模块中使用 Oracle 时,我一直使用 sql developer。
  • 在 SQL Developer 中选择“查看”->“DBMS 输出”。
  • Dbms 输出已打开,已连接到正确的连接,但没有显示任何内容
  • 我正在使用 Oracle SQL 工作表在线尝试它,它给出了Unsupported Command 错误。知道如何解决吗?
【解决方案2】:

是的,在 Oracle SQL Developer 中放置语句:

SET SERVEROUTPUT ON;

就在您的 DECLARE 关键字之前,这应该可以工作。

我找不到 View -> DBMS Output,我使用的是 1.5.5 版。

【讨论】:

    【解决方案3】:

    是的。有办法在 SQL Developer 中查看输出。

    单击 -> 查看-> Dbms 输出,然后单击 Dbms 输出窗口上的 + 符号。现在您可以运行该过程并可以看到输出。

    【讨论】:

      【解决方案4】:

      `下面的语句将给出可能的解决方案试试这个

      SET SERVEROUTPUT ON;
      

      然后运行这段代码会得到如下输出

      declare
      a integer :=10;
      b integer :=20;
      c integer;
      f real;
      begin
      c := a+b;
      dbms_output.put_line('value of c: ' || c);
      f := 70.0/3.0;
      dbms_output.put_line('value of f: ' || f);
      

      结束; /

      代码将给出以下输出

      c 的值:30 f的值:23.3333333333333333333333333333333333333

      PL/SQL 过程成功完成。

      【讨论】:

        【解决方案5】:

        是的,这是正确的。您需要在此块之前使用:

        SET SERVEROUTPUT ON

        然后,消息会显示在窗口上。

        否则我们可以在 SQL Developer select "View" -> "DBMS Output" 中检查。
        PLSQL developerOutPut 标签下,我们可以查看消息。

        【讨论】:

        • 你把设置块放在哪里?在声明中?
        • Declare 为我工作之前
        【解决方案6】:

        如果您在执行过程时通过键入“EXECUTE ;”得到“匿名块已完成”然后运行以下命令并再次执行该过程。 命令是

        设置服务器输出;

        【讨论】:

        • 这只是重复现有的答案。那么您认为它有什么附加价值?
        【解决方案7】:
        **SET SERVEROUTPUT ON;**
        DECLARE
           a INTEGER :=10;
           b INTEGER :=20;
           c float ;
           d real ;
        
        BEGIN
           c :=a+b;
           dbms_output.put_line('the value of C is :'|| c);
           d := 70.0/3.3;
           dbms_output.put_line('the value of d is:'|| d);
        END;
        

        这会给你输出

        the value of C is: 30
        the value of d is: 21.21212121212121212121212121212121212121
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多