問題は、SQL*Plusが最初の;
を解釈していることです。 コマンドのターミネータとして。コマンドをテキストファイルに書き込んで実行すると(またはSQL * Plusを使用してテキストエディタで編集すると)、機能することに気付いたかもしれません。
ライブタイピングで機能させるために、本当にそれを実行したい場合(非常に長くなる可能性は低いと思われます!)、 SET SQLTERMINATOR off
。完了し、/
で実行する必要があることをSQL*Plusに通知する必要があることに注意してください。 2番目の;
としての命令 も無視されます。
SQL> SPOOL myscript.sql
SQL> SET SQLTERMINATOR off
SQL> SELECT q'[SPOOL log
2 SELECT COUNT(*) FROM DUAL;
3 PROMPT Done.
4 ]' FROM DUAL
5 /
SPOOL log
SELECT COUNT(*) FROM DUAL;
PROMPT Done.
これらをデータディクショナリから構築している場合、別のオプションは、PL/SQLを使用してクエリと操作およびdbms_output
を実行することです。 最終的なファイルサイズがバッファ制限を超えない限り、スプールする出力を生成します。