currentSchema (EGL システム変数)

useCurrentSchema ビルド記述子 オプションを YES に設定すると、EGL は、sqlLib.currentSchema システム変数を、 EGL で生成される SQL コードの特定の表名に追加します。このように、 EGL レコード・プロパティーや #sql ディレクティブでは、修飾されていない表名を使用でき、 実行時に修飾を付けることができます。

sqlLib.currentSchema 変数の使用には、 以下の制限があります。
  • Java™ 環境で生成しているか、EGL デバッガーで実行している必要があります。このトピックで後述する『デバッグでの使用』を参照してください。
  • EGL I/O ステートメントで EGL SQLRecord を指定する必要があります。レコードの tableNames プロパティーまたは tableNameVariables プロパティーで、修飾を必要とする表名を指定します。
  • EGL は、EGL prepare ステートメントで作成された SQL ステートメントに sqlLib.currentSchema 変数を含めません。 EGL は、準備中のストリング式内において表名が表示される場所を指定できません。ただし、以下の例のように、独自に変数を含める ことができます。
    prepare p from "DELETE FROM " :: sqlLib.currentSchema :: "MYTBL";
  • useCurrentSchema ビルド記述子オプションを YES に設定する必要があります。

EGL は、vgj.jdbc.schema Java ランタイム・プロパティーから sqlLib.currentSchema の 初期値を取得します。次には、vgj.jdbc.schema プロパティーがその値を sqlSchema ビルド記述子オプション (genProperties ビルド記述子オプション が PROGRAM または GLOBAL に設定されている場合) から取得します。

変数ストリング内に区切り文字があればそれを含めます。このトピックの後半にある例を参照してください。

デバッグでの使用

ホスト・システムによって、通常、修飾されていない表名の使用が可能になり、システムによって異なる 方法でのスキーマの設定が可能になります。iSystem で表を見つけるには、 ライブラリー・リストを検索して指定された表を含むライブラリー (スキーマ) を見つけます。z/OS® では、スキーマは通常、 適切なスキーマ名を持つ BIND ステートメントに QUALIFIER オプションを組み込むことによって BIND 時に決定されます。これを EGL でシミュレートするには、useCurrentSchema ビルド記述子オプションを YES に設定し、sqlSchema ビルド記述子オプションを、 デバッグに使用するテスト・スキーマの名前に設定します。これは、 EGL デバッガーでテストを行った同じ SQL ステートメントから COBOL コードを 生成できる、ということです。

2 つ目の利点は、開発者が通常、テスト専用に使用するスキーマ (またはデータベース全体) に対して 独自のコードをテストすることです。 sqlLib.currentSchema 変数を使用することによって、すべての テストが完了するまで実際のデータへのアクセスを回避できます。 その結果 sqlSchema ビルド記述子オプションの値を変更して コードを再生成するだけで済み、独自の SQL を変更する必要はありません。

次の例では、異なる環境では、スキーマ用の異なるフォーマットが要求されます。

if(sysVar.systemType is ZOSCICS)
  // ここでの変数はスキーマです
  sqlLib.currentSchema = "TESTSCHEMA.";
else 
  if(sysVar.systemType is ISERIESJ)
    // ここでの変数はユーザー・ライブラリーです
    sqlLib.currentSchema = "TESTSCHEMA/";
  end
end