ヘッダーをスキップ
Oracle® TimesTen In-Memory Database PL/SQLパッケージ・リファレンス
11gリリース2 (11.2.2)
B66725-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

4 DBMS_OUTPUT

DBMS_OUTPUTパッケージを使用すると、ストアド・プロシージャおよびパッケージからメッセージを送信できます。このパッケージは、PL/SQLデバッグ情報を表示する場合に特に役立ちます。

この章の内容は次のとおりです。


DBMS_OUTPUTの使用

この項では、DBMS_OUTPUTパッケージの使用に関連するトピックについて説明します。


概要

このパッケージのPUTプロシージャおよびPUT_LINEプロシージャを使用すると、別のプロシージャまたはパッケージが読み取ることができるバッファに情報を格納できます。GET_LINEプロシージャおよびGET_LINESプロシージャをコールすると、バッファされた情報を個別のPL/SQLプロシージャまたは無名ブロックで表示できます。

パッケージを無効にすると、サブプログラムへのすべてのコールが無視されます。このようにして、クライアントが情報を処理できる場合にのみサブプログラムを使用できるようにアプリケーションを設計できます。


使用上の注意


注意:

DBMS_OUTPUTを使用して送信されるメッセージは、送信中のサブプログラムが完了するまで、実際には送信されません。プログラムの実行中に出力をフラッシュするメカニズムはありません。


ルールおよび制限


例外

DBMS_OUTPUTサブプログラムによって、アプリケーション・エラーORA-20000が発生し、出力プロシージャから次のエラーが戻されることがあります。

表4-1 DBMS_OUTPUTの例外

例外 説明

ORU-10027

バッファのオーバーフロー。

ORU-10028

行の長さのオーバーフロー。



通常、DBMS_OUTPUTパッケージは、ストアド・プロシージャまたはファンクションのデバッグに使用されます。

このファンクションは、HRスキーマのemployees表を問い合わせ、指定した部門の合計給与を戻します。ファンクションには、PUT_LINEプロシージャへのコールが含まれています。

CREATE OR REPLACE FUNCTION dept_salary (dnum NUMBER) RETURN NUMBER IS
   CURSOR emp_cursor IS
   select salary, commission_pct from employees where department_id = dnum;
   total_wages NUMBER(11, 2) := 0;
   counter NUMBER(10) := 1;
BEGIN
   FOR emp_record IN emp_cursor LOOP
       emp_record.commission_pct := NVL(emp_record.commission_pct, 0);
       total_wages := total_wages + emp_record.salary
                   + emp_record.commission_pct;
       DBMS_OUTPUT.PUT_LINE('Loop number = ' || counter ||
          '; Wages = '|| TO_CHAR(total_wages)); /* Debug line */
       counter := counter + 1; /* Increment debug counter */
   END LOOP;
   /* Debug line */
   DBMS_OUTPUT.PUT_LINE('Total wages = ' ||
   TO_CHAR(total_wages));
   RETURN total_wages;
END;

ユーザーがttIsqlで次の文を実行するとします。

Command> SET SERVEROUTPUT ON
Command> VARIABLE salary NUMBER;
Command> EXECUTE :salary := dept_salary(20); 

次のような出力が表示されます。

Loop number = 1; Wages = 13000
Loop number = 2; Wages = 19000
Total wages = 19000 

PL/SQL procedure successfully executed.

データ構造

DBMS_OUTPUTパッケージでは、GET_LINESプロシージャで使用するために、2つの表タイプが宣言されます。


注意:

  • PLS_INTEGERデータ・タイプとBINARY_INTEGERデータ・タイプは同じです。このドキュメントでは、リファレンス情報でデータ・タイプ(表タイプ、レコード・タイプ、サブプログラム・パラメータ、サブプログラム戻り値など)を示す場合にBINARY_INTEGERを使用しますが、説明および例ではいずれも使用される場合があります。

  • INTEGERデータ・タイプとNUMBER(38)データ・タイプも同じです。このドキュメントでは、全体をとおしてINTEGERを使用します。


表タイプ

CHARARR表タイプ

DBMSOUTPUT_LINESARRAY表タイプ


CHARARR表タイプ

このパッケージは、GET_LINESプロシージャとともに使用され、PUTプロシージャおよびPUT_LINEプロシージャを介して送信されたテキストを取得します。

構文

TYPE CHARARR IS TABLE OF VARCHAR2(32767) INDEX BY BINARY_INTEGER;

DBMSOUTPUT_LINESARRAY表タイプ

このパッケージは、GET_LINESプロシージャとともに使用され、PUTプロシージャおよびPUT_LINEプロシージャを介して送信されたテキストを取得します。

構文

TYPE DBMSOUTPUT_LINESARRAY IS
     VARRAY(2147483647) OF VARCHAR2(32767);

DBMS_OUTPUTサブプログラムの要約

表4-2 DBMS_OUTPUTパッケージのサブプログラム

サブプログラム 説明

DISABLEプロシージャ


メッセージの出力を無効にします。

ENABLEプロシージャ


メッセージの出力を有効にします。

GET_LINEプロシージャ


バッファから1行を取り出します。

GET_LINESプロシージャ


バッファから行の配列を取り出します。

NEW_LINEプロシージャ


PUTで作成された行を終了します。

PUTプロシージャ


バッファに1行を格納します。

PUT_LINEプロシージャ


バッファに行の一部を格納します。



DISABLEプロシージャ

このプロシージャは、PUTPUT_LINENEW_LINEGET_LINEおよびGET_LINESへのコールを無効にし、バッファに残っている情報をパージします。

ENABLEプロシージャと同様に、ttIsqlSET SERVEROUTPUT ON設定を使用している場合は、このプロシージャをコールする必要はありません。

構文

DBMS_OUTPUT.DISABLE;

ENABLEプロシージャ

このプロシージャは、PUTPUT_LINENEW_LINEGET_LINEおよびGET_LINESへのコールを有効にします。DBMS_OUTPUTパッケージが有効化されていない場合、これらのプロシージャへのコールは無視されます。

構文

DBMS_OUTPUT.ENABLE (
   buffer_size IN INTEGER DEFAULT 20000);

パラメータ

表4-3 ENABLEプロシージャ・パラメータ

パラメータ 説明

buffer_size

バッファに入れられる情報量の上限(バイト)

buffer_sizeNULLを設定すると、制限がなくなります。


使用上の注意


GET_LINEプロシージャ

このプロシージャは、バッファに入れられた単一行の情報を取り出します。

構文

DBMS_OUTPUT.GET_LINE (
   line    OUT VARCHAR2,
   status  OUT INTEGER);

パラメータ

表4-4 GET_LINEプロシージャ・パラメータ

パラメータ 説明

line

末尾の改行文字を除くバッファに入れられた単一行の情報

「ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます」のリスクを回避するために、このパラメータをVARCHAR2(32767)として宣言する必要があります。

status

コール・ステータス

コールが正常に完了すると、0が戻されます。バッファにこれ以上行がないと、1が戻されます。


使用上の注意


GET_LINESプロシージャ

このプロシージャは、バッファから行の配列を取り出します。

構文

DBMS_OUTPUT.GET_LINES (
   lines       OUT     DBMS_OUTPUT.CHARARR,
   numlines    IN OUT  INTEGER);

DBMS_OUTPUT.GET_LINES (
   lines       OUT     DBMS_OUTPUT.DBMSOUTPUT_LINESARRAY,
   numlines    IN OUT INTEGER);

パラメータ

表4-5 GET_LINESプロシージャのパラメータ

パラメータ 説明

lines

バッファに入れられた情報の行の配列

配列内の各行の最大長は32767バイトです。PL/SQL無名ブロックからプロシージャを実行する場合、3GLホスト・プログラムで可変長配列オーバーロード・バージョンを使用することをお薦めします。

numlines

バッファから取り出す行数

プロシージャは、指定の行数を取り出した後、実際に取り出した行数を戻します。この数が要求した行数より少ない場合は、バッファにそれ以上行がない場合です。


使用上の注意


NEW_LINEプロシージャ

このプロシージャは、行端マーカーを設定します。GET_LINEプロシージャおよびGET_LINESプロシージャは、改行で区切られた行を戻します。PUT_LINEプロシージャまたはNEW_LINEへのすべてのコールによって、GET_LINEまたはGET_LINESで戻される行が生成されます。

構文

DBMS_OUTPUT.NEW_LINE;

PUTプロシージャ

このプロシージャは、行の一部をバッファに設定します。


注意:

NUMBER入力を使用するPUTバージョンは非推奨になりました。これは、下位互換性を保つためにのみサポートされています。

構文

DBMS_OUTPUT.PUT (
    a IN VARCHAR2);

パラメータ

表4-6 PUTプロシージャのパラメータ

パラメータ 説明

a

バッファに設定する項目


使用上の注意

例外

表4-7 PUTプロシージャの例外

例外 説明

ORA-20000ORU-10027

ENABLEプロシージャ・コールに指定したbuffer_size制限に基づくバッファのオーバーフロー

ORA-20000ORU-10028

行の長さのオーバーフロー(各行の制限は32767バイト)



PUT_LINEプロシージャ

このプロシージャは、行をバッファに設定します。


注意:

NUMBER入力を使用するPUT_LINEバージョンは非推奨になりました。これは、下位互換性を保つためにのみサポートされています。

構文

DBMS_OUTPUT.PUT_LINE (
   a IN VARCHAR2);

パラメータ

表4-8 PUT_LINEプロシージャのパラメータ

パラメータ 説明

a

バッファに設定する項目


使用上の注意

例外

表4-9 PUT_LINEプロシージャの例外

例外 説明

ORA-20000ORU-10027

ENABLEプロシージャ・コールに指定したbuffer_size制限に基づくバッファのオーバーフロー

ORA-20000ORU-10028

行の長さのオーバーフロー(各行の制限は32767バイト)