13.8 ARGUMENT

構文

ARGUMENT argument_number [PROMPT text] [DEFAULT text] [HIDE] 

デフォルトの入力プロンプト・テキストをカスタマイズし、スクリプトの実行中に引数が渡されない場合に、デフォルト値をパラメータに割り当てます。

argument_number

引数の位置を示します。

PROMPT

ユーザー入力用にカスタマイズされたテキストを示します。

DEFAULT

プロンプトが表示されたときに入力値が指定されなかったり、スクリプトに引数として渡されない場合のパラメータのデフォルト値を設定します。

HIDE

入力値をマスクします。これはPROMPTオプションに適用されます。

使用上の注意

次のいずれを使用してもパラメータが定義されていない場合、プロンプトが表示されます。
  • スクリプト引数として受渡し
  • DEFINEコマンドを使用して設定
  • COLUMN_OLDおよびNEW_VALUE変数を使用して設定
スクリプトの実行時には、PROMPTオプションおよびDEFAULTオプションは次のように動作します:
  • PROMPTのテキストを指定した場合は、デフォルトのプロンプト・テキストのかわりにそのテキストが表示されます。
  • PROMPTのテキストをHIDEオプションとともに指定した場合は、入力を求めるプロンプトが表示されますが、入力値は表示されません。
  • PROMPTオプションとDEFAULTオプションの両方が設定されているが、プロンプトが表示されたときにユーザーが値を指定しない場合、デフォルト値が使用されます。たとえば、ユーザーが値を指定せずに[Enter]キーを押した場合です。
  • DEFAULTオプションが設定され、PROMPTオプションが設定されていない場合は、デフォルト値が使用されます。この場合、ユーザーは入力を求められません。
  • PROMPTオプションが設定され、引数値がスクリプトに渡されない場合は、デフォルトのプロンプト・テキストではなく、カスタマイズされた入力プロンプト・テキストが表示されます。
  • 引数がスクリプトに渡されると、その値が使用されます。この場合、SQL*Plusは入力を求めるプロンプトも表示せず、デフォルト値も使用しません。

スクリプトtest1.sqlに次の内容が含まれている場合:

ARGUMENT 1 PROMPT "Enter value for Arg1:"
DEFINE arg1 = '&1';
SELECT ENAME FROM EMP WHERE EMPNO LIKE '&arg1';

引数を指定せずにこのスクリプトを実行すると、入力を求められます。その後、次の例のように値を入力できます。

@test1.sql
Enter value for Arg1: 7499

スクリプトによって次の出力が表示されます。

ENAME
------
ALLEN 
スクリプトtest2.sqlに次の内容が含まれている場合:
ARGUMENT 1 PROMPT "Enter value for Arg1: " default "%"
DEFINE arg1='&1';
SELECT ENAME FROM EMP WHERE EMPNO LIKE '&arg1';
引数を指定せずにこのスクリプトを実行すると、入力を求められます。入力値を入力せずに[ENTER]キーを押します。
@test2.sql
Enter value for Arg1: 

デフォルト入力値(%)が使用されます。スクリプトによって次の出力が表示されます。

ENAME
----------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

14 rows selected.
スクリプトtest3.sqlに次の内容が含まれている場合:
ARGUMENT 1 PROMPT "Enter value for Arg1: "
DEFINE arg1='&1';
SELECT ENAME FROM EMP WHERE EMPNO LIKE '&arg1';

引数を指定せずにこのスクリプトを実行すると、入力を求められます。入力値を入力せずに[ENTER]キーを押します。

@test3.sql
Enter value for Arg1: 

スクリプトによって次の出力が表示されます。

No rows selected.
スクリプトtest4.sqlに次の内容が含まれている場合:
ARGUMENT 1 DEFAULT "7499"
DEFINE arg1 = '&1'
SELECT ENAME FROM EMP WHERE EMPNO LIKE'&arg1';
引数を指定せずにこのスクリプトを実行すると、デフォルト値が使用されます。
@test4.sql
スクリプトによって次の出力が表示されます。
ENAME
----------
ALLEN
引数を指定してこのスクリプトを実行すると、引数値が使用されます。
@test4.sql 7521
スクリプトによって次の出力が表示されます。
ENAME
----------
WARD
スクリプトtest5.sqlに次の内容が含まれている場合:
ARGUMENT 1 PROMPT "enter value for Arg1: " default '%' hide
DEFINE arg1 = '&1';
SELECT ENAME FROM EMP WHERE EMPNO LIKE '&1';

引数を指定せずにこのスクリプトを実行すると、入力を求められます。HIDEオプションが指定されているため、入力した値はマスクされます。

@test5.sql
Enter value for Arg1: ****

スクリプトによって次の出力が表示されます。

ENAME
----------
WARD