【问题标题】:Printing the value of a variable in SQL Developer在 SQL Developer 中打印变量的值
【发布时间】:2021-12-26 17:35:46
【问题描述】:

我想打印一个匿名块内的特定变量的值。我正在使用 Oracle SQL Developer。我尝试使用dbms_output.put_line。但它不起作用。我正在使用的代码如下所示。

SET SERVEROUTPUT ON

DECLARE

  CTABLE USER_OBJECTS.OBJECT_NAME%TYPE;
  CCOLUMN ALL_TAB_COLS.COLUMN_NAME%TYPE;
  V_ALL_COLS VARCHAR2(500);

  CURSOR CURSOR_TABLE
    IS
    SELECT OBJECT_NAME 
    FROM USER_OBJECTS 
    WHERE OBJECT_TYPE='TABLE'
    AND OBJECT_NAME LIKE 'tb_prm_%';

  CURSOR CURSOR_COLUMNS (V_TABLE_NAME IN VARCHAR2)
    IS
    SELECT COLUMN_NAME
    FROM ALL_TAB_COLS
    WHERE TABLE_NAME = V_TABLE_NAME;

BEGIN

  OPEN CURSOR_TABLE;

  LOOP
    FETCH CURSOR_TABLE INTO CTABLE;
    EXIT WHEN CURSOR_TABLE%NOTFOUND;

    OPEN CURSOR_COLUMNS (CTABLE);

    V_ALL_COLS := NULL;

    LOOP
      FETCH CURSOR_COLUMNS INTO CCOLUMN;
      V_ALL_COLS := V_ALL_COLS || CCOLUMN;
      IF CURSOR_COLUMNS%FOUND THEN
        V_ALL_COLS := V_ALL_COLS || ', ';
      ELSE
        EXIT;
      END IF;
    END LOOP;

    DBMS_OUTPUT.PUT_LINE(V_ALL_COLS);

  END LOOP;
  CLOSE CURSOR_TABLE;

END;

我只得到anonymous block completed 的输出。

【问题讨论】:

  • 输出在程序结束/终止时被刷新,这就是它的工作方式。运行时无法刷新显示。查看日志表(自治事务)以查看程序运行时发生的情况
  • 为什么不使用内置调试器并单步执行您的代码块。它显示了所有变量的状态。
  • 设置服务器输出; --添加分号,选择全部并在开发人员中运行,对我来说它工作正常,

标签: oracle plsql oracle-sqldeveloper


【解决方案1】:

您需要打开 dbms_output。 在 Oracle SQL Developer 中:

  1. 显示 DBMS 输出窗口(查看->DBMS 输出)。
  2. 按“Dbms 输出”窗口顶部的“+”按钮,然后在打开的对话框中选择一个打开的数据库连接。

在 SQL*Plus 中:

 SET SERVEROUTPUT ON

【讨论】:

  • 在 1.5.5 版本中,我的视图下似乎没有该选项。有连接、文件、报告...状态栏、工具栏、刷新,但没有 DBMS 输出。偏好下的东西很多,但我仍然没有看到输出选项。
  • @ruffin:v1.5.5 已经 3 岁了。我用的是v3.0,目前的版本好像是v3.1。
  • /nods 我们被困在 1.5.5 上——如果你有方便的答案,我会接受,但 nps 否则。谢谢!
  • 我在sql文件第一行设置了“SET SERVEROUTPUT ON”选项。
【解决方案2】:

当您明确打开 DBMS_OUTPUT 窗口窗格时,SQL Developer 似乎只输出 DBMS_OUTPUT 文本。

转到(菜单)VIEW -> Dbms_output 以调用窗格。

单击绿色加号为您的连接启用输出,然后运行代码。

编辑:不要忘记根据您期望的输出量设置缓冲区大小。

【讨论】:

    【解决方案3】:

    首先让服务器输出

    1. SET SERVEROUTPUT on然后

    2. 进入 DBMS 输出窗口(查看->DBMS 输出)

    3. 然后按Ctrl+N连接服务器

    【讨论】:

      【解决方案4】:

      有两种选择:

      set serveroutput on format wrapped;
      

      打开“查看”菜单并单击“dbms 输出”。您应该在工作表的底部看到一个 dbms 输出窗口。然后您需要添加连接(由于某种原因,这不会自动完成)。

      【讨论】:

        【解决方案5】:

        1 ) 转到查看菜单。
        2 ) 选择 DBMS_OUTPUT 菜单项。
        3 ) 按 Ctrl + N 并选择连接编辑器。
        4 ) 执行 SET SERVEROUTPUT ON 命令。
        5 ) 然后执行您的 PL/SQL 脚本。

        【讨论】:

          【解决方案6】:
          DECLARE
          
            CTABLE USER_OBJECTS.OBJECT_NAME%TYPE;
            CCOLUMN ALL_TAB_COLS.COLUMN_NAME%TYPE;
            V_ALL_COLS VARCHAR2(5000);
          
            CURSOR CURSOR_TABLE
              IS
              SELECT OBJECT_NAME 
              FROM USER_OBJECTS 
              WHERE OBJECT_TYPE='TABLE'
              AND OBJECT_NAME LIKE 'STG%';
          
            CURSOR CURSOR_COLUMNS (V_TABLE_NAME IN VARCHAR2)
              IS
              SELECT COLUMN_NAME
              FROM ALL_TAB_COLS
              WHERE TABLE_NAME = V_TABLE_NAME;
          
          BEGIN
          
            OPEN CURSOR_TABLE;
            LOOP
              FETCH CURSOR_TABLE INTO CTABLE;
          
              OPEN CURSOR_COLUMNS (CTABLE);
              V_ALL_COLS := NULL;
              LOOP
          
                FETCH CURSOR_COLUMNS INTO CCOLUMN;
                V_ALL_COLS := V_ALL_COLS || CCOLUMN;
                IF CURSOR_COLUMNS%FOUND THEN
                  V_ALL_COLS := V_ALL_COLS || ', ';
                ELSE
                  EXIT;
                END IF;
              END LOOP;
             close CURSOR_COLUMNS ;
              DBMS_OUTPUT.PUT_LINE(V_ALL_COLS);
              EXIT WHEN CURSOR_TABLE%NOTFOUND;
            END LOOP;`enter code here`
            CLOSE CURSOR_TABLE;
          
          END;
          

          我添加了第二个光标的关闭。它也能正常工作并获得输出......

          【讨论】:

            【解决方案7】:

            在较新版本的 SQL developer 中,您不再需要显示单独的输出视图,而是始终以选项卡的形式存在。在您的选项卡列表(SQL 开发人员称之为“窗口”,例如两个 SQL 输入区域)下方,还有另一个选项卡列表,称为“SQL”、“输出”和“统计”。输出不会自动打开,您需要点击选项卡。

            【讨论】:

              【解决方案8】:

              在菜单中选择查看-->DBMS 输出和

              【讨论】:

                【解决方案9】:

                转到 DBMS 输出窗口(查看->DBMS 输出)。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-10-11
                  • 2013-05-05
                  • 2014-08-25
                  相关资源
                  最近更新 更多