手順では、DB内のいくつかのデータを使用してクエリ(selectの和集合)を作成することから始めます。次に、クエリの結果をファイルに入れたいのですが、作成したクエリを使用
execute immediate
またはdbms_sql.execute
フォローしようとしても、何も起こりませんでした。
だから私は、そのようなクエリをどのように実行するのか疑問に思いましたか?
ありがとう
SET SERVEROUTPUT ON;
SPOOL TEST.TXT
DECLARE
test_cur SYS_REFCURSOR;
v_date DATE;
BEGIN
OPEN test_cur FOR 'SELECT SYSDATE FROM DUAL';
FETCH test_cur INTO v_date;
CLOSE test_cur;
DBMS_OUTPUT.put_line ('DATE IS ' || v_date);
END;
SPOOL OFF
DATE IS 11-DEC-12
PL/SQL procedure successfully completed.
またはPLSQLブロックなしで直接
SET SERVEROUTPUT ON;
SPOOL TEST.TXT
SELECT SYSDATE FROM DUAL;
SPOOL OFF
SYSDATE
---------
11-DEC-12
1 row selected.
編集
SET SERVEROUTPUT ON;
SPOOL TEST.TXT
DECLARE
CURSOR test_cur
IS SELECT * FROM XYZ;
BEGIN
FOR v_test_row IN test_cur;
LOOP
DBMS_OUTPUT.put_line ('XXXYYYY ' || v_test_row .<your column name>);
END LOOP;
END;
SPOOL OFF
SQL * Plusなどのクライアントからクエリを実行する場合、バックグラウンドでクライアントプログラムがカーソルを開き、各行のフェッチをループすることを忘れがちです。PL / SQLでは、同じことを行う必要があります。