SQL テーブル・データの検索
EGL を使用すると、SQL テーブル、ビュー、または結合の定義から、SQL レコード・フィールドを作成することができます。
SQL レコード・フィールドを SQL テーブルの定義から作成するには、以下のステップを実行します。
- SQL 設定が適切に設定されていることを確認する。 詳しくは、SQL 検索設定の変更を参照してください。
- 次のように、デフォルトのデータベース接続を設定する。これは、テーブル・データを検索するために EGL が使用する接続です。
- とクリックします。
- 「EGL」を展開して「SQL データベース接続」をクリックする。
- 「接続」リストからデータベース接続を選択するか、新規データベース接続を作成する。 「接続」リスト内で選択されている接続は、デフォルトのデータベース接続です。
- タスクの実行場所を決定する。
- EGL ソース・ファイル内 (各 SQL レコードを開発した場合と同様)
- 「アウトライン」ビュー内 (既に SQL レコードが存在する場合)
- EGL ソース・ファイルで作業を行っている場合は、以下の手順を実行する。「アウトライン」ビューで作業を行っている場合は、次のステップにスキップする。
- SQL レコードが存在しない場合は、このレコードを作成する。
- R と入力し、Ctrl+Space を押して、「コンテンツ・アシスト」リスト内で SQL テーブル・エントリー (通常は「表名付き SQL レコード」) を選択する。
- SQL レコードの名前を入力し、Tab を押してから、テーブル名を 1 つ入力するか、テーブルのリストをコンマで区切って入力するか、またはビューの別名を入力する。
最小限のコンテンツを入力して SQL レコードを作成することもできます。 この方法は、レコード名がテーブル名と同じ場合に使用します。例えば、以下のように入力します。Record myTable type sqlRecord end - レコードで任意の個所を右クリックします。
- メニューで、とクリックする。
- SQL レコードが存在しない場合は、このレコードを作成する。
- 「アウトライン」ビューで作業を行っている場合は、SQL レコードのエントリーを右クリックし、ポップアップ・メニューで「SQL を検索」をクリックする。
注: DB2® の条件 WITH CHECK OPTIONS を使用して定義されている SQL ビューは検索できません。
レコード・フィールドの作成後に、レコード内のフィールド用に同等のデータ項目パーツを作成することによって、生産性を向上させることができます。
- EGL エディターでレコードを開き、「アウトライン」ビューを開く。「アウトライン」ビューのページには、パーツおよびその他の EGL コードの階層ビューが表示されます。
- 「アウトライン」ビューでフィールドを右クリックし、「データ項目パーツを作成」」をクリックする。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 検索機能によってレコードを作成する際に、デフォルト・マッピングを使用します。デフォルト・マッピングについて、次の表で説明します。
| 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 データ型の最大長を使用して、長さを割り当てます。
互換性
| プラットフォーム | 問題 |
|---|---|
| Java™ 生成 | 数値データを SQL テーブル列から読み取って長さの短いホスト変数に変換する場合、EGL では代入ステートメントでのオーバーフローとして処理されます。 |
| COBOL 生成 | 数値データを SQL テーブル列から読み取って長さの短いホスト変数に変換する場合、先頭のゼロの桁は左端から切り捨てられます。ゼロの桁を切り捨てても桁数がホスト変数より大きい場合は、(10 進数の) 小数点以下が右端から削除されます。このときエラーは表示されません。小数点以下が削除されても桁数が多すぎる場合は、負の SQL コードが戻り、オーバーフロー条件になっていることが表示されます。 |