2.1.1 ARGUMENTコマンドを使用したSQLclスクリプトのパラメータの定義
ARGUMENT
コマンドを使用すると、SQLclスクリプトに渡されるSQL*Plusパラメータを定義できます。パラメータが存在しない場合、このコマンドによってパラメータのDEFINE
が追加されます。
パラメータは、位置別にスクリプトに渡され、各位置に対して1から始まる番号が割り当てられます。したがって、パラメータ1に値を指定するには、argument 1 [options]を使用し、パラメータ2にはargument 2 [options]などを使用します。詳細は、Oracle SQL*Plusユーザーズ・ガイドのSTARTコマンドによるパラメータの受渡しを参照してください。
構文
argument|arg OPTIONS
SET PARAMETERPOLICY
コマンドを使用して、パラメータの保持を制御します。パラメータの保持は、このコマンドを使用して定義するかどうかにかかわらず、すべてのパラメータに適用されます。
SET PARAMETERPOLICY
がSHARE
(デフォルト)の場合、定義済変数は次の操作を行うまで値が保持されます:
- 変数を参照する新しい
DEFINE
コマンドの入力。 - 変数を参照する
UNDEFINE
コマンドの入力。 - 変数を参照する
ACCEPT
コマンドの入力。 COLUMN
コマンドのNEW_VALUE
またはOLD_VALUE
句で変数を参照し、SELECT
コマンドで列を参照。- SQLclの終了。
SET PARAMETERPOLICY
がISOLATE
の場合:
- パラメータ設定が保存され、スクリプトの開始時は未定義です。
- スクリプトから戻ると、保存されたパラメータが復元されます。
- 呼び出されるスクリプトのパラメータ設定は、包含するスクリプトには影響しません。
スクリプトを呼び出す前に、SET PARAMETERPOLICY
コマンドを指定する必要があります。スクリプト内でSET PARAMETERPOLICY
がISOLATE
に設定された場合、戻るとパラメータが削除されます。スクリプトの開始時に値が保存されていないため、パラメータはリセットできません。
オプション
オプション | 説明 |
---|---|
必須 | |
arg_num |
1を基準としたパラメータの位置。 |
action {default|prompt} |
パラメータが定義されていない場合に実行する引数アクション。
|
action_value |
パラメータに指定する値、またはユーザーに値の入力を促す文字列。スペースを含む値は二重引用符で囲む必要があります。 |
オプション | |
comment {comment} |
コメントをパラメータに関連付けます。 {comment} - 指定されたコメント値をパラメータに関連付けます。 |
comment_value |
パラメータに関連付けるコメント。スペースを含む値は二重引用符で囲む必要があります。 |
例
例1 - 次の例では、ARGUMENT
コマンドを使用して、スクリプト(script.sql)内の2つのパラメータを定義します。
script.sql:
prompt 'Give value for 1 or prompt for it: &1'
prompt 'Give value for 99 or prompt for it: &99'
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> arg 99 default 99_set
/* 99 shared with script.sql */
SQL> @script.sql
Enter value for 1: x
'Give value for 1 or prompt for it: x'
'Give value for 99 or prompt for it: 99_set'
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
例2 - 次の例は、スクリプトが呼び出されるたびにSET PARAMETERPOLICY ISOLATE
を使用してパラメータを再定義する方法を示しています。
SQL> set parameterpolicy isolate
SQL> arg 99 default 99_set
/* 99 is not passed to the script, so prompted for */
SQL> @script.sql
Enter value for 1: x2
'Give value for 1 or prompt for it: x2'
Enter value for 99: x99
'Give value for 99 or prompt for it: x99'
/* 99 restored - set back to the original value when script.sql finishes */
SQL> define 99
DEFINE 99 = "99_set" (CHAR)