SQL テーブル・データの検索

EGL を使用すると、SQL テーブル、ビュー、または結合の定義から、SQL レコード・フィールドを作成することができます。

SQL レコード・フィールドを SQL テーブルの定義から作成するには、以下のステップを実行します。
  1. SQL 設定が適切に設定されていることを確認する。 詳しくは、SQL 検索設定の変更を参照してください。
  2. 次のように、デフォルトのデータベース接続を設定する。これは、テーブル・データを検索するために EGL が使用する接続です。
    1. 「ウィンドウ」 > 「設定」とクリックします。
    2. 「EGL」を展開して「SQL データベース接続」をクリックする。
    3. 「接続」リストからデータベース接続を選択するか、新規データベース接続を作成する。 「接続」リスト内で選択されている接続は、デフォルトのデータベース接続です。
  3. タスクの実行場所を決定する。
    • EGL ソース・ファイル内 (各 SQL レコードを開発した場合と同様)
    • 「アウトライン」ビュー内 (既に SQL レコードが存在する場合)
  4. EGL ソース・ファイルで作業を行っている場合は、以下の手順を実行する。「アウトライン」ビューで作業を行っている場合は、次のステップにスキップする。
    1. SQL レコードが存在しない場合は、このレコードを作成する。
      1. R と入力し、Ctrl+Space を押して、「コンテンツ・アシスト」リスト内で SQL テーブル・エントリー (通常は「表名付き SQL レコード」) を選択する。
      2. SQL レコードの名前を入力し、Tab を押してから、テーブル名を 1 つ入力するか、テーブルのリストをコンマで区切って入力するか、またはビューの別名を入力する。
      最小限のコンテンツを入力して SQL レコードを作成することもできます。 この方法は、レコード名がテーブル名と同じ場合に使用します。例えば、以下のように入力します。
        Record myTable type sqlRecord
        end
    2. レコードで任意の個所を右クリックします。
    3. メニューで、「SQL レコード」 > 「SQL を検索」とクリックする。
  5. 「アウトライン」ビューで作業を行っている場合は、SQL レコードのエントリーを右クリックし、ポップアップ・メニューで「SQL を検索」をクリックする。
注: DB2® の条件 WITH CHECK OPTIONS を使用して定義されている SQL ビューは検索できません。
レコード・フィールドの作成後に、レコード内のフィールド用に同等のデータ項目パーツを作成することによって、生産性を向上させることができます。
  1. EGL エディターでレコードを開き、「アウトライン」ビューを開く。「アウトライン」ビューのページには、パーツおよびその他の EGL コードの階層ビューが表示されます。
  2. 「アウトライン」ビューでフィールドを右クリックし、「データ項目パーツを作成」」をクリックする。EGL はレコード内のフィールドに基づいてデータ項目パーツを作成し、そのデータ項目をフィールド・タイプとして使用します。

SQL データ型と EGL プリミティブ型との互換性

EGL ホスト変数 (ホスト変数を参照) とこれに対応する SQL テーブル列は、次のいずれかの場合に互換性があります。
  • SQL 列の書式が文字データの書式であり、EGL ホスト変数の型が CHAR で、その長さが SQL 列の長さ以下である場合。
  • SQL 列の書式が DBCHAR データの書式であり、EGL ホスト変数の型が DBCHAR で、その長さが SQL 列の長さ以下である場合。
  • SQL 列がなんらかの書式の数値であり、EGL ホスト変数の型が次のいずれかである場合。
    • BIN(4,0)/SMALLINT
    • BIN(9,0)/INT
    • BIN(18,0)/BIGINT
    • DECIMAL (小数点以下の桁を含み、最大 18 桁)。 DECIMAL 変数の桁数は、EGL ホスト変数や SQL 列の桁数と同じであること。
  • SQL 列のデータ型に制限がなく、EGL ホスト変数の型は HEX であり、SQL 列とホスト変数のバイト数が同じ場合。データはデータ転送時に変換されない。

    型が HEX の EGL ホスト変数では、EGL プリミティブ型に対応しないデータ型の SQL 列であれば、どのような SQL 列へのアクセスでもサポートされています。

文字データを SQL テーブル列から読み取って、長さの短いホスト変数に変換する場合、その内容は右端から切り捨てられます。切り捨てのテストを行うには、EGL の if 文で予約語 trunc を使用します。

デフォルト・マッピング

EGL は、SQL 検索機能によってレコードを作成する際に、デフォルト・マッピングを使用します。デフォルト・マッピングについて、次の表で説明します。

表 1. EGL 変数の特性
SQL データ型 EGL 変数の特性
プリミティブ型 数字/文字 バイト数
BIGINT BIGINT 該当なし 8
BIT SMALLINT 該当なし 2
BLOB BLOB 該当なし 該当なし
BOOLEAN BOOLEAN 該当なし 1
CHAR CHAR 1 から 32767 1 から 32767
CLOB CLOB 該当なし 該当なし
DATE DATE 該当なし 8
DECIMAL DECIMAL 1 から 18 1 から 10
DOUBLE FLOAT 該当なし 8
FLOAT FLOAT 該当なし 8
GRAPHIC DBCHAR 1 から 16383 2 から 32766
INTEGER INT 該当なし 4
LONG VARBINARY HEX 65534 32767
LONG VARCHAR CHAR >4000 >4000
LONG VARGRAPHIC DBCHAR >2000 >4000
NUMERIC DECIMAL 1 から 18 1 から 10
REAL SMALLFLOAT 該当なし 4
SMALLINT SMALLINT 該当なし 2
TIME TIME 該当なし 6
TIMESTAMP TIMESTAMP 該当なし 14
VARBINARY HEX 2 から 65534 1 から 32767
VARCHAR CHAR 4000 以下 4000 以下
VARGRAPHIC DBCHAR 2000 以下 4000 以下

VARCHAR 型または VARGRAPHIC 型の SQL テーブル列には、最大長が定義されています。retrieve コマンドは、この最大長を使用して EGL ホスト変数に長さを割り当てます。ただし、LONG VARCHAR 型または LONG VARGRAPHIC 型の SQL テーブル列には最大長が定義されないため、retrieve コマンドは SQL データ型の最大長を使用して、長さを割り当てます。

互換性

表 2. SQL データの互換性に関する考慮事項
プラットフォーム 問題
Java™ 生成 数値データを SQL テーブル列から読み取って長さの短いホスト変数に変換する場合、EGL では代入ステートメントでのオーバーフローとして処理されます。
COBOL 生成 数値データを SQL テーブル列から読み取って長さの短いホスト変数に変換する場合、先頭のゼロの桁は左端から切り捨てられます。ゼロの桁を切り捨てても桁数がホスト変数より大きい場合は、(10 進数の) 小数点以下が右端から削除されます。このときエラーは表示されません。小数点以下が削除されても桁数が多すぎる場合は、負の SQL コードが戻り、オーバーフロー条件になっていることが表示されます。

フィードバック