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

組み込みのデバッガーを使用して、ブロックをステップ実行しませんか。すべての変数の状態が表示されます。
ウルフ

5
SERVEROUTPUTをONに設定します。-セミコロンを追加し、ALLを選択して開発者で実行します。私にとっては問題なく機能します
Praveenkumar_V

回答:


203

dbms_outputをオンにする必要があります。Oracle SQL Developer:

  1. [DBMS出力]ウィンドウを表示します([表示]-> [DBMS出力])。
  2. Dbms出力ウィンドウの上部にある「+」ボタンを押し、開いたダイアログで開いているデータベース接続を選択します。

SQL * Plusの場合:

 SET SERVEROUTPUT ON

バージョン1.5.5では、[表示]にそのオプションがないようです。接続、ファイル、レポート...ステータスバー、ツールバー、更新がありますが、DBMS出力はありません。設定にはたくさんありますが、出力のオプションはまだ表示されません。
ruffin

1
@ruffin:v1.5.5は3歳です。私はv3.0を使用していますが、現在のバージョンはv3.1のようです。
KlasLindbäck12年

/ nods 1.5.5で立ち往生しています-答えが手元にあれば私はそれを採用しますが、それ以外の場合はnpsです。ありがとう!
ruffin

SQLファイルの最初の行でオプション "SET SERVEROUTPUT ON"を設定しました。
Samih A 2014

どうもありがとうございます!
Amazigh.Ca

18

SQL Developerは、DBMS_OUTPUTウィンドウペインを明示的にオンにした場合にのみ、DBMS_OUTPUTテキストを出力するようです。

(メニュー)VIEW-> 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;

2番目のカーソルのクローズを追加しました。それも機能し、出力も取得しています...



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.