2004年07月03日(土)

[Oracle] コマンドラインからSQLを実行する方法

テーマ:DB-Oracle
Oracleにはアプリケーションからドライバを介してアクセスするのが普通ですが、SQL*Plusユーティリティを使えばコマンドラインからアクセスすることも可能です。
コマンドラインからの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自身もデータベース作成時などに内部的に利用している仕組みなので、結構使えます。

コメントComments

[コメントをする]

コメント投稿

一緒にプレゼントも贈ろう!

Amebaおすすめキーワード