EGL を使用すると、SQL テーブル、ビュー、または結合の定義から、SQL レコード・フィールドを作成することができます。
Record myTable type sqlRecord
end
型が 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 コードが戻り、オーバーフロー条件になっていることが表示されます。 |