6.9.4 HiRDBの定義とCOBOLの定義の関連性
HiRDBによる索引編成ファイルを使用する場合,HiRDBでのスキーマ定義とCOBOLでの定義との関連性や,SQLデータ型とCOBOLデータ定義との関連性について,注意が必要です。HiRDBの定義とCOBOLの定義の関連性について説明します。
(1) RDBの接続と切り離し
- 接続
-
COBOLの実行単位で,HiRDBによる索引編成ファイルに対する最初のOPEN文,または切り離し後のOPEN文でファイルをオープンするときに,HiRDBの環境変数PDUSERの設定に基づいてHiRDBと接続します。環境変数PDUSERの詳細については,「HiRDBのUAP開発ガイドマニュアル」を参照してください。
- 切り離し
-
COBOLの実行単位で,HiRDBによる索引編成ファイルに対するすべてのファイルを閉じたときに,HiRDBから切り離されます。
(2) スキーマ定義とCOBOLプログラムとの関連
HiRDBによる索引編成ファイルを使用する場合は,はじめにデータベースを設計してからスキーマ定義を作成します。このスキーマ定義を基に,COBOLプログラムを作成します。
スキーマ定義とCOBOL原始プログラムとの関連を次に示します。
- 規則
-
-
表は,実表またはビュー表で定義します。
-
スキーマ定義の表名を,ASSIGN句の定数,外部装置名に関連づけられた環境変数,またはデータ名に設定します。
-
スキーマ定義の列名とCOBOLのレコードの項目名を一致させます。なお,-EquivRuleオプションを指定する場合,等価規則が適用されなくてもスキーマ定義の列名とCOBOLのレコードの項目名が一致するように,項目名を記述する必要があります。
-
スキーマ定義の列とCOBOLのレコード項目の属性は一致させなければなりません。一致していない場合,動作は保証しません。詳細は,「(3) RDBの列のデータ型とCOBOLのデータ記述」を参照してください。
-
スキーマ定義の列とCOBOLのレコードのデータ配置を一致させます。データの配置がずれるような境界調整はしないでください。
-
スキーマ定義の長さとCOBOLのレコードの長さを一致させます。
-
主/副レコードキーに指定したCOBOLのデータ項目に対応する列は,インデクス定義を省略できます。ただし,重複キーを検知するには,インデクス定義時のCREATE INDEXで,UNIQUEを指定する必要があります。
-
CREATE SCHEMA,CREATE TABLE,表名,列名の規則の詳細については,「HiRDBのSQLリファレンスマニュアル」を参照してください。
-
WRITE文で重複キーを検知する場合は,対応する列に対してユニークなインデクスを付けなくてはなりません。次にその例を示します。
1.単一列インデクスの場合(合成キー以外の場合)
REC01列の重複を検知する例
2.複数列インデクスの場合(合成キーの場合)
REC01,REC02を合わせた値で重複を検知する例
- (インデクスを付けるときの注意事項)
-
-
WRITE文で重複キーを検知しない場合は,対応する列に対してユニークなインデクスを付けてはなりません。
-
WRITE文で書き出すレコード中のキーデータ項目に対応する列以外に,ユニークなインデクスを付けてはなりません。キー以外の項目にユニークなインデクスを付けた場合,WRITE文で正しくキー重複を検知できなくなります。例えば,レコード中のキーデータ項目に対応する列以外でキー重複を検知することがあります。
-
合成キーを使用する場合,CREATE INDEXで並べる列の順序と合成キーに指定する項目の順序は一致させなければなりません。この順序が一致していないときの動作は保証しません。
CREATE INDEXの詳細については,「HiRDBのSQLリファレンスマニュアル」を参照してください。
-
-
(3) RDBの列のデータ型とCOBOLのデータ記述
COBOLのレコードを定義するときは,RDBの列の属性に合わせて定義しなければなりません。
HiRDBの列のデータ型とCOBOLのデータ記述の対応を次に示します。なお,この表にないデータ型は,使用できません。
HiRDBの列のデータ型 |
COBOLのデータ記述 |
項目の記述 |
備考 |
---|---|---|---|
SMALLINT |
L1 基本項目名 PIC S9(4) USAGE COMP. |
基本項目 |
|
INTEGER |
L1 基本項目名 PIC S9(9) USAGE COMP. |
基本項目 |
|
DECIMAL 〔(m〔,n〕)〕 |
L1 基本項目名 PIC S9(m-n)〔V9(n)〕 USAGE PACKED-DECIMAL. |
基本項目 |
1≦m≦18, AIX(64)の場合で-MaxDigits38オプション指定時 1≦m≦38, 0≦n≦m m=nの場合はSV9(n)とする n=0の場合は〔V9(n)〕を省略する |
SMALLFLT |
L1 基本項目名 USAGE COMP-1. |
基本項目 |
|
FLOAT |
L1 基本項目名 USAGE COMP-2. |
基本項目 |
|
CHAR〔(n)〕 |
L1 基本項目名 PIC X(n). |
基本項目 |
1≦n≦30000 |
VARCHAR(n) |
L2 集団項目名. L3 基本項目名1 PIC S9(4) USAGE COMP. L3 基本項目名2 PIC X(n). |
二つの基本項目から構成される集団項目 基本項目1:文字長 基本項目2:文字列 |
1≦n≦32000 |
NCHAR〔(n)〕 |
L1 基本項目名 PIC N(n). |
基本項目 |
1≦n≦15000 |
NVARCHAR(n) |
L2 集団項目名. L3 基本項目名1 PIC S9(4) USAGE COMP. L3 基本項目名2 PIC N(n). |
二つの基本項目から構成される集団項目 基本項目1:文字長 基本項目2:文字列 |
1≦n≦16000 |
DATE |
L1 基本項目名 PIC X(4). |
基本項目 |
4バイト'yyyymmdd'の形式 (例えば2002/7/11の場合,X'20020711'が格納される) |
TIME |
L1 基本項目名 PIC X(3). |
基本項目 |
3バイト’hhmmss’の形式 (例えば11:25:43の場合,X'112543'が格納される) |
INTERVAL YEAR TO DAY |
L1 基本項目名 PIC S9(8) USAGE PACKED-DECIMAL. |
基本項目 |
|
INTERVAL HOUR TO SECOND |
L1 基本項目名 PIC S9(6) USAGE PACKED-DECIMAL. |
基本項目 |
|
MCHAR[(n)] |
L1 基本項目名 PIC X(n). |
基本項目 |
1≦n≦30000 |
MVARCHAR(n) |
L2 集団項目名. L3 基本項目名1 PIC S9(4) USAGE COMP. L3 基本項目名2 PIC X(n). |
二つの基本項目から構成される集団項目 基本項目1:文字長 基本項目2:文字列 |
1≦n≦32000 |
BLOB |
L2 集団項目名. L3 FILLER PIC S9(9) USAGE COMP. L3 基本項目名1 PIC S9(9) USAGE COMP. L3 基本項目名2 PIC X(n). |
三つの基本項目名から構成される集団項目 基本項目1:データ長 基本項目2:バイナリデータ |
1≦n≦65527 |