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

B.5.1 処理の進行状況などのメッセージを画面に出力したい

Oracleデータベース

set serveroutput on;・・・(1)

DECLARE
  v_col1        CHAR(20);
  v_col2        INTEGER;
  CURSOR c1 IS
    SELECT col1, col2 FROM t1;
BEGIN
  DBMS_OUTPUT.PUT_LINE('-- BATCH_001 Start --');
  OPEN c1;
  DBMS_OUTPUT.PUT_LINE('-- LOOP Start --');
  LOOP
    FETCH c1 INTO v_col1, v_col2;
    EXIT WHEN c1%NOTFOUND;
    DBMS_OUTPUT.PUT('.');
  END LOOP;
  DBMS_OUTPUT.NEW_LINE;・・・(2)
  DBMS_OUTPUT.PUT_LINE('-- LOOP End --');
  CLOSE c1;

  DBMS_OUTPUT.PUT_LINE('-- BATCH_001 End --');


EXCEPTION
  WHEN OTHERS THEN
     DBMS_OUTPUT.PUT_LINE('-- SQL Error --');
     DBMS_OUTPUT.PUT_LINE('ERROR : ' || SQLERRM );
END;
/

FUJITSU Enterprise Postgres

DO $$
DECLARE
    v_col1      CHAR(20);
    v_col2      INTEGER;
    c1 CURSOR FOR
        SELECT col1, col2 FROM t1;
BEGIN
    PERFORM DBMS_OUTPUT.SERVEROUTPUT(TRUE);・・・(1)
    PERFORM DBMS_OUTPUT.ENABLE(NULL);・・・(1)

    PERFORM DBMS_OUTPUT.PUT_LINE('-- BATCH_001 Start --');

    OPEN c1;
    PERFORM DBMS_OUTPUT.PUT_LINE('-- LOOP Start --');
    LOOP
        FETCH c1 INTO v_col1, v_col2;
        EXIT WHEN FOUND = false;
        PERFORM DBMS_OUTPUT.PUT('.'); 
    END LOOP;
    PERFORM DBMS_OUTPUT.NEW_LINE(); ・・・(2)

    PERFORM DBMS_OUTPUT.PUT_LINE('-- LOOP End --');
    CLOSE c1;

    PERFORM DBMS_OUTPUT.PUT_LINE('-- BATCH_001 End --');

EXCEPTION
    WHEN OTHERS THEN
        PERFORM DBMS_OUTPUT.PUT_LINE('-- SQL Error --');
        PERFORM DBMS_OUTPUT.PUT_LINE('ERROR : ' || SQLERRM );
END;
$$
;

(1) SERVEROUTPUT/ENABLE
記述差異
Oracleデータベース

SET文を使用してSERVEROUTPUT ONを指定します。

FUJITSU Enterprise Postgres

DBMS_SQL.SERVEROUTPUT(TRUE)を指定します。

移行手順

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

  1. ストアドプロシジャのPL/SQLブロックより前にSET SERVEROUTPUT文が指定されているか確認します。

  2. SET SERVEROUTPUT文が指定されている場合は、PL/pgSQLのBEGINの直後にDBMS_SQL.SERVEROUTPUTを指定します。画面に出力するためにONが指定されている場合はTRUEを指定します。OFFが指定されている場合はFALSEを指定します。

  3. SET SERVEROUTPUTがONである場合のみ、追加でDBMS_SQL.ENABLEを指定します。引数に指定する値は以下の通りです。

    • SET SERVEROUTPUT文にSIZE指定がある場合は、指定されたサイズを引数に指定します。

    • SET SERVEROUTPUT文にSIZE指定がない場合は、Oracle10.1g以前の場合は2000、Oracle10.2g以降の場合はNULL値を指定します。

補足) ストアドプロシジャのPL/SQLブロックにDBMS_SQL.ENABLEが指定されている場合は、その引数の値に従ってください。


(2) NEW_LINE
記述差異
Oracleデータベース

“パッケージ名.機能名”の引数がない場合、括弧を省略することができます。

FUJITSU Enterprise Postgres

“パッケージ名.機能名”の引数がない場合でも、括弧を省略できません。

移行手順

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

  1. “DBMS_OUTPUT.NEW_LINE”というキーワードでストアドプロシジャ内を検索します。

  2. “パッケージ名.機能名”の後に括弧がない場合は、括弧を追記してください。