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 PARAMETERPOLICYSHARE (デフォルト)の場合、定義済変数は次の操作を行うまで値が保持されます:

  • 変数を参照する新しいDEFINEコマンドの入力。
  • 変数を参照するUNDEFINEコマンドの入力。
  • 変数を参照するACCEPTコマンドの入力。
  • COLUMNコマンドのNEW_VALUEまたはOLD_VALUE句で変数を参照し、SELECTコマンドで列を参照。
  • SQLclの終了。

SET PARAMETERPOLICYISOLATEの場合:

  • パラメータ設定が保存され、スクリプトの開始時は未定義です。
  • スクリプトから戻ると、保存されたパラメータが復元されます。
  • 呼び出されるスクリプトのパラメータ設定は、包含するスクリプトには影響しません。

スクリプトを呼び出す前に、SET PARAMETERPOLICYコマンドを指定する必要があります。スクリプト内でSET PARAMETERPOLICYISOLATEに設定された場合、戻るとパラメータが削除されます。スクリプトの開始時に値が保存されていないため、パラメータはリセットできません。

オプション

オプション 説明
必須
arg_num 1を基準としたパラメータの位置。
action {default|prompt}

パラメータが定義されていない場合に実行する引数アクション。

  • prompt: ユーザーにパラメータ値の入力を求め、設定します。
  • default: デフォルト値を設定します。
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)