SQL*Plusで次の2つのSQL文を続けて実行し、最初に表示されたプロンプトでsalaryと入力しました。2つのSQL文の実行中に、値の入力を求めるプロンプトは合計で何回表示されますか。
SELECT employee_id, &&col_name FROM employees WHERE &col_name > 5000;
SELECT employee_id, &col_name FROM employees ORDER BY &col_name;A1回✓
B2回
C3回
D4回
正解:A解説
&&を付けた置換変数は、入力された値を変数として定義(DEFINE)します。定義された変数は、その後の&による参照でもプロンプトを表示せずに同じ値が使われます。
今回は1つ目のSQL文の&&col_nameで1回だけプロンプトが表示され、col_nameにsalaryが定義されます。以降の3か所の&col_nameはすべてsalaryに置き換えられるため、プロンプトは合計1回です。
&と&&の違い
| 記述 | 動作 |
|---|---|
| &変数名 | 変数が未定義なら、出現するたびにプロンプトを表示する |
| &&変数名 | プロンプトで入力した値を定義し、以降は再利用する |
**関連するSQL*Plusコマンド**
| コマンド | 役割 |
|---|---|
| DEFINE 変数名 = 値 | 置換変数を事前に定義する |
| DEFINE 変数名 | 定義済みの値を表示する |
| UNDEFINE 変数名 | 定義を削除する(次回の&で再びプロンプトが出る) |
| SET VERIFY ON/OFF | 置換前(old)と置換後(new)の表示を切り替える |
&&を使わずにすべて&で記述していた場合は、出現するたびにプロンプトが表示されるため4回になります。