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

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

Oracleデータベース

set serveroutput off;

DECLARE
    v_num        INTEGER;
BEGIN

    DBMS_OUTPUT.DISABLE;・・・(3)
DBMS_OUTPUT.ENABLE(20000);・・・(4) DBMS_OUTPUT.PUT_LINE('-- ITEM CHECK --'); SELECT count(*) INTO v_num FROM t1; IF v_num = 0 THEN DBMS_OUTPUT.PUT_LINE('-- NO ITEM --'); ELSE DBMS_OUTPUT.PUT_LINE('-- IN ITEM(' || v_num || ') --'); END IF; END; / set serveroutput on; DECLARE v_buffs DBMSOUTPUT_LINESARRAY;・・・(5) v_num INTEGER := 10; BEGIN DBMS_OUTPUT.GET_LINES(v_buffs, v_num);・・・(5) FOR i IN 1..v_num LOOP DBMS_OUTPUT.PUT_LINE('LOG : ' || v_buffs(i));・・・(5) END LOOP; END; /

FUJITSU Enterprise Postgres

DO $$
DECLARE
    v_num        INTEGER;
BEGIN
    PERFORM DBMS_OUTPUT.SERVEROUTPUT(FALSE);
    PERFORM DBMS_OUTPUT.DISABLE();・・・(3)
    PERFORM DBMS_OUTPUT.ENABLE(20000);・・・(4)
PERFORM DBMS_OUTPUT.PUT_LINE('-- ITEM CHECK --'); 

    SELECT count(*) INTO v_num FROM t1;

    IF v_num = 0 THEN
        PERFORM DBMS_OUTPUT.PUT_LINE('-- NO ITEM --');
    ELSE
        PERFORM DBMS_OUTPUT.PUT_LINE('-- IN ITEM(' || v_num || ') --');
    END IF;
END;
$$
;

DO $$
DECLARE
    v_buffs      VARCHAR[];・・・(5)
    v_num        INTEGER := 10;
BEGIN
    PERFORM DBMS_OUTPUT.SERVEROUTPUT(TRUE);
    SELECT lines, numlines INTO v_buffs, v_num FROM DBMS_OUTPUT.GET_LINES(v_num);・・・(5)

    FOR i IN 1..v_num LOOP
        PERFORM DBMS_OUTPUT.PUT_LINE('LOG : ' || v_buffs[i]);・・・(5)
    END LOOP;
END;
$$
;

(3) DISABLE

DBMS_OUTPUTパッケージのNEW_LINEと同じです。記述差異および、記述差異に伴う移行手順については、NEW_LINEを参照してください。


(4) ENABLE

DBMS_OUTPUTパッケージのNEW_LINEと同じです。記述差異および、記述差異に伴う移行手順については、NEW_LINEを参照してください。


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

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

記述差異
Oracleデータベース

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

FUJITSU Enterprise Postgres

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

移行手順

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

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

  2. DBMS_OUTPUT.GET_LINESの第1引数に指定している変数(例のv_buffs)のデータ型(例のDBMSOUTPUT_LINESARRAY)をVARCHAR型の配列(例のVARCHAR[])に変更します。

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

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

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

    • FROM句にDBMS_OUTPUT.GET_LINESを記載します。引数は修正前の第2引数(例のv_num)のみ指定します。

  4. 第1引数(例のv_buffs)を参照をしている箇所を洗い出し、PL/pgSQLの配列の参照形式(例のv_buffs[i])に変更します。