無名ブロック内の特定の変数の値を出力したかった。 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
としてのみ出力を取得しています。
Dbms_outputをオンにする必要があります。 Oracle SQL Developerの場合:
SQL * Plusの場合:
SET SERVEROUTPUT ON
SQL Developerは、DBMS_OUTPUTウィンドウを明示的にオンにした場合にのみDBMS_OUTPUTテキストを出力するようです。
(メニュー)VIEW-> Dbms_outputに進み、ペインを呼び出します。
緑色のプラス記号をクリックして接続の出力を有効にし、コードを実行します。
編集:あなたが期待している出力の量に応じてバッファサイズを設定することを忘れないでください。
最初にサーバー出力を作成する
SET SERVEROUTPUT on
then
[DBMS出力]ウィンドウに移動します([表示]-> [DBMS出力])
を押す Ctrl+N 接続サーバー用
2つのオプションがあります。
set serveroutput on format wrapped;
または
「表示」メニューを開き、「dbms output」をクリックします。ワークシートの下部にdbms出力ウィンドウが表示されます。次に、接続を追加する必要があります(何らかの理由でこれは自動的に行われません)。
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番目のカーソルのクローズを追加しました。それも動作し、出力を取得しています...