アーカイブ

‘Oracle’ タグのついている投稿

Oracle SQLPlus PL/SQL 変数(置換変数・バインド変数)の使い方

2013 年 6 月 13 日 コメントはありません

変数の使い方がいまいち理解できていなかったのでメモ。

OracleではSQLに変数を使うことができます。
この変数にはいくつか種類があって使い方が異なります。

置換変数

OracleのSQLでは、置換変数という変数を使用することができます。
置換変数にはDEFINEコマンドを使用して、事前に値を定義しておく事ができます。
SQLの中で置換変数を使用する場合は変数名の前に&(アンパーサンド)を付けて使用します。
 
DEFINEコマンドで定義されていない置換変数を使用した場合、SQL実行時にプロンプトが表示され値の入力が促されます。
 
DFINEコマンドで置換変数を定義しないで以下のようなSQLを実行するとmailに値を設定して下さいというプロンプトが表示されます。

SQL> SELECT * FROM CUSTOMER WHERE MAIL_ADDRESS = ‘&mail’;

DEFINEコマンド

置換変数を事前に定義して値を設定できます。
設定した変数はスクリプトの中で繰り返し使用できます。

DEFINE 変数名=値
SQL> DEFINE mail=hoge@hoge

と設定して置換変数&mailの値を事前に設定しておく事ができます。

ただ単に、DEFINEとだけコマンドを実行すると
現在定義されている置換変数の一覧を表示することができます。

置換変数(引数)

変数名に数字のみを使用すると、SQLスクリプトファイルに渡された引数が順番に格納されます。

SQLスクリプトファイル:test.sql
SELECT * FROM CUSTOMER WHERE MAIL_ADDRESS = ‘&1′ OR TEL = ‘&2′;

SQL> @test.sql hoge@hoge.com 111-1111

&1に、hoge@hoge.com
&2に、111-1111

が入ります。

また、置換変数(引数)の場合、SQLスクリプト中のすべての置換変数が繰り返し置き換わります。

この時、DEFINEコマンドで置換変数を確認してみると以下のように設定されている事が確認できます。

SQL>define
DEFINE 1=hoge@hoge
DEFINE 2=111-111

 
置換変数について、もっと詳しい内容は以下のOracleのページを参照してみてください。
>Oracle SQL*Plus ユーザーズガイド(置換変数)
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19277-01/ch5.html#7364

バインド変数

バインド変数は、SQL*PlusとPL/SQLの双方で参照できる変数です。
PL/SQLに値を渡したり、結果を受け取ったりできます。
バインド変数は var 変数名 型 と宣言します。

SQL> var count number;

宣言したバインド変数は、PL/SQLから変数名の前に:コロンをつけて参照したり値を格納することができます。

SQL> BEGIN
SQL> :count:=3;
SQL> END;
SQL> /

PL/SQLで設定した値を、SQL*Plusで画面に出力するにはPRINTコマンドを使います。

SQL> PRINT count

 
バインド変数についての詳細は以下のOracleのページを参照してみてください。
>Oralce SQL*Plusユーザーズガイド(バインド変数の使用方法)
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19277-01/ch5.html#9862
 


カテゴリー: Oracle, 開発 タグ: , ,