[Oracle] コマンドラインからSQLを実行する方法
テーマ:DB-OracleコマンドラインからのSQL*Plusの使い方(基本編)
まず、SQL*PlusでOracleに接続する基本的な方法は、こんな感じです。
sqlplus scott/tiger
"scott"はユーザー名、"tiger"はパスワードです。
これだけでORACLE_SIDで指定された既定のインスタンスに接続できます。
あとはSQL*Plusプロンプトが現れるので、対話形式でSQLやSQL*Plusコマンドを実行すればOKです。
終了するときはexitです。
既定のインスタンス以外に接続したい場合は
sqlplus scott/tiger@ORCL
というふうに、ユーザー名、パスワードの後、"@"に続けてOracle接続文字列を記述します。
また、SYSDBA権限で接続したい場合は
sqlplus "sys/change_on_install@ORCL AS SYSDBA"
というふうに、"AS SYSDBA"を指定すればいいのですが、間にスペースが入ると1つの引数として認識できないので必ず""で括る必要があります。
あと、SQL*Plusを起動するだけでいい場合は
sqlplus /NOLOG
とします。
さて、対話形式で使う分には上記のような記述でいいわけですが、コマンドラインから使うのならやはりバッチ的に使いたいものです。
SQL*Plusをバッチ的に使うにはまずスクリプトファイルを用意する必要があります。
そして用意したスクリプトファイルを指定してSQL*Plusを実行するにはこのようにします。
sqlplus "scott/tiger@ORCL @script.sql
スクリプトファイルの前には@、または@@をつけなくてはなりません。@は相対パス指定、@@は絶対パス指定です。
コマンドラインからのSQL*Plusの使い方(応用編)
SQL*Plusの起動オプションでできることは上記のようなことくらいですが、SQL*Plusコマンドを駆使するとさらにいろいろな使い方ができます。
set echo off spool script.log whenever sqlerror exit failure rollback prompt バッチ処理を開始します。 begin . . . end; exit
例えば、こんな感じのスクリプトファイルなら、エコーをオフにして、出力をscript.logに書き出し、メッセージを表示し、PL/SQLブロックを実行し、SQL*Plusを終了します。実行中にエラーが発生したらロールバックして終了します。
さらにスクリプトファイルの中では、SQL*Plusの起動時に指定した引数を使用することもできます。
sqlplus "scott/tiger@ORCL @script.sql 10 [script.sql] select ename from emp where empno = &1;
また、逆に戻り値を受け取ることもできます。
var cnt number begin select count(*) into :cnt from emp; end; exit :cnt
とまぁ、こんな感じで使うわけです。
Oracle自身もデータベース作成時などに内部的に利用している仕組みなので、結構使えます。