在SQL Developer中打印变量的值


102

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


在程序结束/结束时刷新输出,这就是它的工作方式。运行时无法刷新显示。查看日志表(自主事务)以查看程序运行时发生的情况
tbone 2011年

为什么不使用内置的调试器并逐步执行代码块。它显示所有变量的状态。
狼”

5
开启SERVEROUTPUT;-添加半冒号,选择ALL并在开发人员中运行,对我而言,它的工作正常,
Praveenkumar_V 2014年

Answers:


203

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

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

在SQL * Plus中:

 SET SERVEROUTPUT ON

在1.5.5版中,“查看”下似乎没有该选项。有连接,文件,报告...状态栏,工具栏,刷新,但没有DBMS输出。首选项下有很多东西,但我仍然看不到输出选项。
鲁芬2012年

1
@ruffin:v1.5.5年3岁。我正在使用v3.0,当前版本似乎是v3.1。
克拉斯·林德贝克(KlasLindbäck)2012年

/ nods我们停留在1.5.5上-如果您有方便的答案,我会接受的,否则为nps。谢谢!
鲁芬2012年

我在sql文件的第一行上设置了“ SET SERVEROUTPUT ON”选项。
萨米A 2014年

非常感谢!
Amazigh.Ca

18

当您显式打开DBMS_OUTPUT窗口窗格时,SQL Developer似乎仅输出DBMS_OUTPUT文本。

转到(菜单)视图-> Dbms_output调用窗格。

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

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


6

首先使服务器输出

  1. SET SERVEROUTPUT on 然后

  2. 转到“ DBMS输出”窗口(“视图”->“ DBMS输出”)

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


3

有2个选项:

set serveroutput on format wrapped;

要么

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


1

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

在此处输入图片说明 在此处输入图片说明


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;

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



-1

转到“ DBMS输出”窗口(“视图”->“ DBMS输出”)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.