この制御セクションを独自のスクリプトに入れることができる場合、たとえば elcm_ctl.sql
、あなたはそれを作ることができます:
accept run_it char format a1 prompt "Run the script?"
set termout off
whenever sqlerror exit success rollback
exec if upper(nvl('&run_it', 'N')) != 'Y' then raise no_data_needed; end if;
whenever sqlerror continue
spool c:\elcm.sql
select 'select sysdate from dual;' from dual;
spool off
set termout on
spool c:\elcm_details.spl
@c:\elcm.sql
spool off
承認
コマンド
私の意見では、置換プロンプトに依存するよりも少しすっきりしていて、ある程度自己文書化されています。これにより、'gen'
だけでなく、指定された文字列がユーザーに表示されます。 。 (SQL * Plusでは、これを拡張して、ユーザーに1文字を入力させ、それより長い文字を入力すると再プロンプトを表示できます。何も入力せずにReturnキーを押すと、デフォルトで「N」になります。ただし、SQLDeveloperはサポートしているだけです。機能のサブセット)。
次に、入力された変数値が'y'
でない場合、小さな匿名ブロックが例外をスローします(どちらでもかまいません)。 または'Y'
。その間、を設定しました終了
したがって、実際の例外は表示されません。そして、私は sqlerror
>
その例外が発生したときにスクリプトを終了させて、後で発生するものは実行されないようにします。これは、次のクエリだけでなく、制御スクリプトの他のすべてですが、より柔軟にする必要がある場合は、いくつかのサブスクリプトを含めることができます。
ただし、SQL Developerでは、 termout
@
を介して実行した場合にのみ期待どおりに機能します 。 elcm_ctl.sql
のコンテンツを実行する場合 SQLワークシートから直接、例外が発生していることがわかりますが、これは少し見苦しいです。したがって、代わりにその制御スクリプトを保存し、空のワークシートに次のようにします。
@c:\elcm_ctl.sql
そのワークシートをスクリプトとして実行すると、プロンプトが表示されます。 'Y'
を入力した場合 スクリプトの出力は、スクリプト出力ウィンドウに表示されます( set termout off
をオフのままにしない限り) 制御スクリプト内)、スプールファイルを作成します。他に何かを入力すると、 elcm.sql
は実行されません。 ファイル、スクリプト出力ウィンドウに何も表示されず、スプールファイルを作成しません。