ページの先頭行へ戻る
Enterprise Postgres 10 アプリケーション開発ガイド
FUJITSU Software

B.5.3 別のプロシージャ(PL/SQL)ブロックで実行した結果を受け取りたい(GET_LINEの場合)

Oracleデータベース

set serveroutput on;

DECLARE
    v_buff1       VARCHAR2(100);
    v_buff2       VARCHAR2(1000);
    v_num        INTEGER;
BEGIN

    v_buff2 := '';
    LOOP
        DBMS_OUTPUT.GET_LINE(v_buff1, v_num);・・・(6)
        EXIT WHEN v_num = 1;
        v_buff2 := v_buff2 || v_buff1;
    END LOOP;

    DBMS_OUTPUT.PUT_LINE(v_buff2);
END;
/

※値を取得する処理のみ記載しています。

FUJITSU Enterprise Postgres

DO $$
DECLARE
    v_buff1       VARCHAR(100);
    v_buff2       VARCHAR(1000);
    v_num        INTEGER;
BEGIN
    PERFORM DBMS_OUTPUT.SERVEROUTPUT(TRUE);
    v_buff2 := '';
    LOOP
        SELECT line, status INTO v_buff1, v_num FROM DBMS_OUTPUT.GET_LINE();・・・(6)
        EXIT WHEN v_num = 1;
        v_buff2 := v_buff2 || v_buff1;
    END LOOP;

    PERFORM DBMS_OUTPUT.PUT_LINE(v_buff2);
END;
$$
;

※値を取得する処理のみ記載しています。


(6) GET_LINE
Oracleデータベースにおける記述形式

DBMS_OUTPUT.GET_LINE(第1引数, 第2引数)

記述差異
Oracleデータベース

取得する値は、引数に指定した変数で受け取ります。

FUJITSU Enterprise Postgres

取得する値は、DBMS_OUTPUT.GET_LINEの検索結果なので、SELECT文のINTO句に指定した変数で受け取ります。

移行手順

以下の手順で移行してください。

  1. “DBMS_OUTPUT.GET_LINE”というキーワードでストアドプロシジャ内を検索し、呼び出し箇所を特定します。

  2. DBMS_OUTPUT.GET_LINEの呼び出し箇所を、SELECT INTO文に置き換えます。

    • 選択リストに、line, statusと記載します。

    • INTO句に、DBMS_OUTPUT.GET_LINEに設定した第1引数(例のv_buff1)と第2引数(例のv_num)を引数と同じ順番で記載します。

    • FROM句にDBMS_OUTPUT.GET_LINEを記載します。引数を指定しませんが、括弧は指定します。