置き換え変数とはコマンドファイル中にユーザ変数名の前に&を一つ付けた変数を言います。&を二つ付けた変数もありますがそれは後述します。
コマンドファイル中に置き換え変数があれば、ユーザ変数に置き換えて、コマンドファイルを実行します。
たとえば、ユーザ変数colにemp_idが格納されていたとします。
以下のコマンドファイルを実行すると
select &col
from tbl_employee
where rownum <= 1;
このコマンドファイルは以下のように解釈されて実行されます。
select emp_id
from tbl_employee
where rownum <= 1;
置き換え変数が未定義の場合は。
SQL> select &col
2 from tbl_employee
3 where rownum <=1;
colに値を入力してください: emp_id
EMP_ID
******
000001
SQL>
というように置き換え変数に何を格納するかを求めるプロンプトが表示されます。この置き換え変数には任意の文字列を格納することができますので、上記ではemp_idと入力してEnterを押しています。
置き換え変数に文字列を連結したい場合、以下のように置き換え変数と文字列をドット(.)で連結します。
SQL> select emp_id
2 from tbl_employee
3 where rownum <=&num.0;
numに値を入力してください: 1
EMP_ID
******
000001
000002
000003
000004
000005
000006
000007
000008
000009
000010
SQL>
最初にも言いましたが、置き換え変数にはコマンドファイル中のユーザ変数名の前に&を二つ付けた変数があります。
この置き換え変数は、コマンドファイルを1回実行すると、その置き換え変数に入力した値が、そのSQL*Plusセッション中でユーザ変数として定義されます。
上記例の&numを&&numに変更し、実行します。そして例のとおり1を入力します。
するとユーザ変数numが1として定義されます。&が一つの場合はユーザ変数として定義はされません。
試しに、
define num と入力すると
SQL> define num
DEFINE NUM = "1" (CHAR)
SQL>
というように定義されているのがわかります。