7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQL*Plusで実行するSQL文をBATファイルに含める方法

Last updated at Posted at 2020-01-20

ファイル数が多いのが嫌だ

  • OracleのSQL*Plusをバッチファイルで実行するとき、SQL文が書かれたファイルのパスを指定します
    ちょっとしたSQLを実行するのにBATファイルとSQL記述ファイルの2つを用意しなければなりません
    Unixのシェルスクリプトではヒアドキュメントの仕組みを利用すると、スクリプト内に標準入力のテキスト
    を記述できるため、1ファイルに収めることができます
  • そこで、Windows環境でバッチファイルとSQL文を一つのファイルにできないかということ

基本的な構造

  1. ファイル名の拡張子は.batにします
    拡張子を.batにすることによってダブルクリックでバッチファイルとして起動します
  2. SQLPLUSのコマンドラインオプションで自分自身を読み込むようにします
    SQLPLUS @"%~f0"
    と指定すると自分自身をSQLファイルとして実行します
  3. バッチファイルとして実行する部分はSQLPlusにとって無視できるようコメント行になるようにします
    SQL
    Plusの入力SQLは以下のコメント形式があります

・ 行頭にREMと記述すると、その行はコメント行となります
・ 行の途中に--があると、行末までコメントとなります
/**/に囲まれた部分はブロックコメントとなります

一方、バッチファイルでも行頭のREMはコメントとして扱われます
また、^が行の途中にあると次の行も併せて1行として処理されます

この仕組みを利用して、以下のような構造にします

sample.bat
1 REM ^
2 /*
3 バッチコマンド行
4 SQLPLUS @"%~f0"
5 EXIT
6 */
7 SQL文

バッチファイルとしては、1,2行目がコメントとなるので、3,4,5行と順に実行し、5行めのEXITで終了します
一方、SQLPLUSの入力文としては、1行目は行コメント、2~6行目まではブロックコメントになるので、7行目のSQLが実行されます

実際の例

こんな感じで書けます

ORA_SQLPLUS.BAT
Rem ^
/*
@Echo Off
Cls
SET Path=%Path%;C:\Program Files\instantclient_12_2
SET CONN=user/pass@hostname:1521/pdb1
SET NLS_LANG=japanese_japan.ja16sjis
sqlplus %CONN% @"%~f0"

Pause
Exit /b
*/
-- ここから SQL*Plus で読み込む SQL
DELETE FROM SAMPLE_TBL
 WHERE DEL_FLG = '1';
COMMIT;
EXIT

実行結果

SQLPLUS.png

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?