在SQL Developer中打印变量的值

112

我想要打印一个匿名块内的变量值。我正在使用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;

我只得到了输出:匿名块已完成


程序结束/终止时输出被刷新,这就是它的工作方式。你不能在运行时刷新到显示器。查看日志表(自主事务)以查看程序运行时发生了什么。 - tbone
为什么不使用内置的调试器并逐步执行您的代码块呢?它会显示所有变量的状态。 - WoMo
6
打开 SERVEROUTPUT;-- 添加分号,在开发者模式下选择全部并运行,对我来说它可以正常工作。 - Praveenkumar_V
9个回答

225

你需要启用dbms_output。

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

在SQL * Plus中:

 SET SERVEROUTPUT ON

在1.5.5版本中,我似乎在“视图”下没有那个选项。有连接、文件、报告......状态栏、工具栏、刷新,但没有DBMS输出。在首选项下有很多东西,但我仍然没有看到输出选项。 - ruffin
1
@ruffin:v1.5.5已经有3年的历史了。我正在使用v3.0,而当前版本似乎是v3.1。 - Klas Lindbäck
我们卡在1.5.5上了 - 如果你有答案方便的话,我会接受的,但如果没有也没关系。谢谢! - ruffin
我在sql文件的第一行设置了选项“SET SERVEROUTPUT ON”。 - Samih A

22

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

请前往(菜单)VIEW -> Dbms_output来调用该窗格。

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

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


9

首先让服务器输出:

  1. 运行SET SERVEROUTPUT on命令

  2. 打开DBMS输出窗口(查看->DBMS输出)

  3. 按下Ctrl+N连接服务器


7

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

enter image description here enter image description here


4

有两个选项:

set serveroutput on format wrapped;

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


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

我已经添加了第二个游标的关闭。它正在工作并且也得到了输出...


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

-1

在菜单中选择视图->DBMS输出


-1

前往DBMS输出窗口(视图-> DBMS输出)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接