SET CURRENT PACKAGE PATH ステートメント

SET CURRENT PACKAGE PATH ステートメントは、 CURRENT PACKAGE PATH 特殊レジスターに値を割り当てます。

このステートメントは、トランザクションの制御下にありません。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込む方法のみ可能です。 これは、動的に作成できない実行可能ステートメントです。

許可

必要ありません。

構文

Read syntax diagramSkip visual syntax diagramSET CURRENT PACKAGE PATH= ,schema-nameCURRENT PACKAGE PATHCURRENT PATHCURRENT_PATHCURRENT USERCURRENT_USERSESSION_USERSYSTEM_USERUSERhost-variablestring-constant

説明

schema-name
スキーマを識別します。 その名前は、空またはブランクだけの区切り ID であってはなりません (SQLSTATE 42815)。
CURRENT PACKAGE PATH
このステートメントが実行される前の CURRENT PACKAGE PATH 特殊レジスターの値。
CURRENT PATH
CURRENT PATH 特殊レジスターの値。
CURRENT USER
CURRENT USER 特殊レジスターの値。
SESSION_USER
SESSION_USER 特殊レジスターの値。
SYSTEM_USER
SYSTEM_USER 特殊レジスターの値。
ユーザー
USER 特殊レジスターの値。
ホスト変数 (host-variable)
1 つ以上のスキーマ名をコンマで区切って指定します。 ホスト変数は次の条件を満たしていなければなりません。
  • 文字ストリング変数であること (CHAR または VARCHAR)。 ホスト変数の内容の実際の長さは、CURRENT PACKAGE PATH 特殊レジスターの長さを超えてはなりません。
  • NULL 値でないこと。 標識変数が提供される場合、その値が NULL 値を示していてはなりません。
  • 空またはブランクのストリング、または 1 つ以上のスキーマ名をコンマで区切って指定すること。
  • ホスト変数の実際の長さが内容よりも大きい場合は、右側をブランクで埋めること。
  • CURRENT PACKAGE PATH、CURRENT PATH、CURRENT_PATH、 CURRENT USER、CURRENT_USER、SESSION_USER、SYSTEM_USER、PATH、または USER を含まないこと。
  • 空またはブランクだけを含む区切り ID を指定しないこと。
ストリング定数
コンマで区切ったゼロ個以上のスキーマ名を含む文字ストリング定数を指定します。 ストリング定数は次の条件を満たしていなければなりません。
  • CURRENT PACKAGE PATH 特殊レジスターの最大長を超えない長さであること。
  • CURRENT PACKAGE PATH、CURRENT PATH、CURRENT_PATH、 CURRENT USER、CURRENT_USER、SESSION_USER、SYSTEM_USER、PATH、または USER を含まないこと。
  • 空またはブランクだけを含む区切り ID を指定しないこと。

ルール

  • 複数の同じスキーマがリストに現れた場合は、最初に現れるスキーマが使用されます (SQLSTATE 01625)。
  • 指定できるスキーマの数は、CURRENT PACKAGE PATH 特殊レジスターの合計長によって限定されます。 特殊レジスター・ストリングは、指定されたそれぞれのスキーマ名を採って末尾ブランクを除去し、 名前を二重引用符で囲み、そしてスキーマ名をコンマで区切ることによって構築されます。 結果リストの長さが、特殊レジスターの最大長を超えることはできません (SQLSTATE 0E000)。
  • スキーマ名が通常 ID の規則に準拠していない場合 (例えば、小文字を含むスキーマ名や、 通常 ID に指定できない文字を含むスキーマ名など) には、 区切り文字で区切られているスキーマ名として指定する必要があり、 ホスト変数内またはストリング定数内に指定することはできません。
  • 特殊レジスター (単一キーワードとして指定したもの) の現行値が パッケージ・パス内で使用されることを指示するには、 特殊レジスターの名前をキーワードとして指定します。 その代わりに、特殊レジスターの名前が区切り ID として指定される場合 (例えば "USER") は、 その値のスキーマ名 ('USER') として解釈されます。
  • SET CURRENT PACKAGE PATH ステートメントに指定された値が変数であるか、 スキーマ名であるかを判別するために、次の規則が使用されます。
    • name が SQL プロシージャー内のパラメーターまたは SQL 変数と同じ場合は、 name はパラメーターまたは SQL 変数として解釈され、 name の値がパッケージ・パスに割り当てられます。
    • name が SQL プロシージャー内のパラメーターまたは SQL 変数と同じでない場合は、 name はスキーマ名として解釈され、 name の値がパッケージ・パスに割り当てられます。

  • トランザクションの考慮事項: SET CURRENT PACKAGE PATH ステートメントはコミット可能な操作ではありません。 ROLLBACK は CURRENT PACKAGE PATH 特殊レジスターに影響を及ぼしません。
  • スキーマの存在検査: CURRENT PACKAGE PATH 特殊レジスターがセットされる時点では、指定されたスキーマが存在することの確認は行われません。 例えば、つづりを誤ったスキーマが検出されない場合、 それは後続の SQL の作動の仕方に影響する可能性があります。 パッケージの実行時には、合致するパッケージへの許可が検査され、 この許可検査に失敗した場合はエラーが戻されます (SQLSTATE 42501)。
  • ホスト変数またはストリング定数の内容: ホスト変数またはストリング定数の内容は、スキーマ名のリストとして解釈されます。 複数のスキーマ名を指定する場合は、それぞれの名前をコンマで区切る必要があります。 リスト内の各スキーマ名は、通常 ID を形成するための規則に準拠するか、 区切り ID として指定する必要があります。 ホスト変数またはストリング定数の内容は大文字変換されません。
  • COBOL アプリケーション用の組み込み SQL に特有の制限: SET CURRENT PACKAGE PATH ステートメントの右辺には、 最大で 10 個のリテラル (非ホスト変数) を指定できます。 そのような値の最大長は 130 (区切りなし) または 128 (区切りあり) です。

  • 例 1: CURRENT PACKAGE PATH 特殊レジスターを、以下のスキーマのリストに設定します: MYPKGS, 'ABC E', SYSIBM
       SET CURRENT PACKAGE PATH = MYPKGS, 'ABC E', SYSIBM
    次のステートメントは、ホスト変数を結果リストの値に設定します。
       SET :hvpklist = CURRENT PACKAGE PATH
    ホスト変数の値は: "MYPKGS", "ABC E", "SYSIBM"
  • 例 2: CURRENT PACKAGE PATH 特殊レジスターを、 以下のスキーマのリストに設定します: "SCH4","SCH5" (ただし、:hvar1 は 'SCH4,SCH5' を含みます)
       SET CURRENT PACKAGE PATH :hvar1
    このステートメントの実行後の CURRENT PACKAGE PATH 特殊レジスターの値は: "SCH4","SCH5"
  • 例 3: CURRENT PACKAGE PATH 特殊レジスターを、 以下のスキーマのリストに設定します: "SCH1","SCH#2","SCH3","SCH4","SCH5" (ただし、 :hvar1 は 'SCH4,SCH5' を含みます)
       SET CURRENT PACKAGE PATH = SCH1,'SCH#2',"SCH3",:hvar1
    このステートメントの実行後の CURRENT PACKAGE PATH 特殊レジスターの値は: "SCH1","SCH#2","SCH3","SCH4","SCH5"
  • 例 4: CURRENT PACKAGE PATH 特殊レジスターをクリアします。
       SET CURRENT PACKAGE PATH = ''
  • 例 5: SUMMARIZE プロシージャーの実行のために、 "SCH_PROD" スキーマ (:prodschema ホスト変数に含まれる) および "SCH_PROD2" スキーマ (:prod2schema ホスト変数に含まれる) を、 CURRENT PACKAGE PATH 特殊レジスターの末尾に一時的に付加します。 それから、CURRENT PACKAGE PATH 特殊レジスターを以前の値に戻します。
       SET :oldCPP = CURRENT PACKAGE PATH
    
       SET CURRENT PACKAGE PATH = CURRENT PACKAGE PATH,:prodschema,:prod2schema
    
       CALL SUMMARIZE(:V1,:V2)
    
       SET CURRENT PACKAGE PATH = :oldCPP
  • 例 6: CURRENT PACKAGE PATH 特殊レジスターを、区切り文字で区切られているスキーマ名のリストに設定します: "MY.SCHEMA" (組み込みピリオド)、"OLD SCHEMA" (組み込みブランク)。 両方の区切り ID を含む単一のホスト変数を使用します。
       hv = '"MY.SCHEMA", "OLD SCHEMA"'
    
       SET CURRENT PACKAGE PATH = :hv
    あるいは、両方の区切り ID を含む単一のストリング定数を使用します。
       SET CURRENT PACKAGE PATH = '"MY.SCHEMA", "OLD SCHEMA"'
    あるいは、区切り文字で区切られているスキーマのリストを使用します。
       SET CURRENT PACKAGE PATH = 'MY.SCHEMA', 'OLD SCHEMA'