COBOL2002 使用の手引 手引編


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原始プログラムとの関連を次に示します。

図6‒3 スキーマ定義と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のデータ記述の対応を次に示します。なお,この表にないデータ型は,使用できません。

表6‒6 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

注1

L1,L2,およびL3はレベル番号を表しています。

L1:レベル番号01〜49

L2:レベル番号01〜48

L3:レベル番号02〜49(ただし,L3>L2)

注2

SQLのデータ型については,「HiRDBのSQLリファレンスマニュアル」を参照してください。