sql >> データベース >  >> RDS >> Oracle

OracleSQLスクリプトでの条件ベースのスプール生成

    この制御セクションを独自のスクリプトに入れることができる場合、たとえば 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は実行されません。 ファイル、スクリプト出力ウィンドウに何も表示されず、スプールファイルを作成しません。




    1. Googleマップはポイントを表示しません-XMLはnullです

    2. 複数の行に値を分割する

    3. SQL Serverのrowversionをlongまたはulongに変換しますか?

    4. TSTZRANGEを&&で結合すると、Postgresql9.4クエリの速度が徐々に遅くなります