Hitachi

ノンストップデータベース HiRDB Version 10 構造型データベース機能(UAP開発編)


2.4.3 埋込み変数の使用例

埋込み変数の使用例を次に示します。

〈この項の構成〉

(1) ルートレコードを検索する際に条件値の指定で埋込み変数を使用する例

ルートレコードを検索する際に,条件値の指定で埋込み変数を使用する例を説明します。

検索結果のレコード実現値を受け取る埋込み変数の使用例については,「(2) 検索結果のレコード実現値を取得する際に埋込み変数を使用する例」を参照してください。

レコード型(ルートレコード)の定義例
RECORD TENPO
  2 DBKEY                                            ...1
   3 TENPO_CD            XCHARACTER  1  TYPE  K,L    ...2
  2  TENPO_NAME          CHARACTER  30  TYPE  U,D

[説明]

  1. ルートレコードのデータベースキーの集団項目

    キーの条件の左辺に指定する構成要素です。

  2. ルートレコードのデータベースキーの構成要素

埋込み変数の宣言例(データ部の作業場所節)
DATA  DIVISION.
WORKING-STORAGE  SECTION.
01  X_TENPO.                      ...1
  02  X_DBKEY.
    03  X_TENPO_CD   PIC X.
  02  X_TENPO_NAME   PIC X(30).
01  Y_DBKEY.                      ...2
  02  Y_TENPO_CD    PIC X.        ...3
01  Z_DBKEY.                      ...2
  02  Z_TENPO_CD    PIC X.        ...3

[説明]

  1. 検索対象のレコード型に対応する埋込み変数の集団項目を宣言します。

  2. ルートレコードのデータベースキーの集団項目に対応する埋込み変数の集団項目を宣言します。

  3. ルートレコードのデータベースキーの構成要素に対応する埋込み変数の基本項目を宣言します。

埋込み変数の使用例(手続き部)
PROCEDURE DIVISION.
MOVE  X'01'  TO  Y_TENPO_CD.       ...1
 
EXEC DML
  FETCH FIRST TENPO
    INTO :X_TENPO
    WHERE ("DBKEY" = :Y_DBKEY)     ...2
END-DML.
 
MOVE  X'02'  TO  Y_TENPO_CD.       ...3
MOVE  X'05'  TO  Z_TENPO_CD.       ...4
EXEC DML
  FETCH NEXT TENPO
INTO :X_TENPO
    WHERE ("DBKEY" >= :Y_DBKEY     ...5
      AND  "DBKEY" <= :Z_DBKEY)
END-DML.

[説明]

下線の個所が埋込み変数です。

  1. 検索するレコード実現値のデータベースキーを埋込み変数に設定します。

  2. データベースキーが条件値に指定した埋込み変数と一致するレコード実現値をFETCH文で検索して,レコード実現値を取得しています。条件式の右辺に,条件値を設定した埋込み変数を指定します。

  3. 検索するレコード実現値の範囲の下限であるデータベースキーを埋込み変数に設定します。

  4. 検索するレコード実現値の範囲の上限であるデータベースキーを埋込み変数に設定します。

  5. データベースキーが条件値に指定した2つの埋込み変数の範囲にあるレコード実現値をFETCH文で検索して,レコード実現値を取得しています。範囲を指定するそれぞれの条件式の右辺に,条件値を設定した埋込み変数を指定します。

(2) 検索結果のレコード実現値を取得する際に埋込み変数を使用する例

検索結果のレコード実現値を取得する際に埋込み変数を使用する例を説明します。

レコード型(子レコード)の定義例
RECORD ZAIKO                                          ...1
  2  TENPO_CD            XCHARACTER  1  TYPE  K,L     ...2
  2  DBKEY               INTEGER        TYPE  K,N     ...3
  2  SCODE               CHARACTER   4  TYPE  U,D     ...4
  2  SNAME               CHARACTER  30  TYPE  U,D     ...4
  2  TANKA               INTEGER        TYPE  U,D     ...4
  2  ZSURYO              INTEGER        TYPE  U,D     ...4

[説明]

  1. 検索対象の子レコード

  2. 親レコードのデータベースキーの構成要素

  3. 子レコードのデータベースキー(一連番号)

  4. ユーザデータの基本項目

埋込み変数の宣言例(データ部の作業場所節)
DATA  DIVISION.
WORKING-STORAGE  SECTION.
 
01  X_ZAIKO.                                ...1
  02  CH_TENPO_CD      PIC X.               ...2
  02  CH_DBKEY         PIC S9(8) COMP.      ...3
  02  SCODE            PIC X(4).            ...4
  02  SNAME            PIC X(30).           ...4
  02  TANKA            PIC S9(8) COMP.      ...4
  02  ZSURYO           PIC S9(8) COMP.      ...4

[説明]

  1. 検索対象のレコード型に対応する埋込み変数の集団項目を宣言します。

  2. 親レコードのデータベースキーの構成要素に対応する埋込み変数の基本項目を宣言します。

  3. 子レコードのデータベースキー(一連番号)に対応する埋込み変数の基本項目を宣言します。

  4. 子レコードのユーザデータに対応する埋込み変数の基本項目を宣言します。

埋込み変数の使用例(手続き部)
PROCEDURE DIVISION.
 
EXEC DML
  FETCH FIRST ZAIKO
    INTO :X_ZAIKO                ...1
    WITHIN TENPO_ZAIKO
END-DML.

[説明]

下線の個所が埋込み変数です。

  1. FETCH文でレコードを検索して,レコード実現値を取得しています。FETCH文のINTO句に,レコード実現値を受け取る埋込み変数を指定します。

(3) レコードの更新処理で埋込み変数を使用する例

レコードの更新処理で埋込み変数を使用する例を説明します。

レコード型(子レコード)の定義例
RECORD ZAIKO                                           ...1
  2  TENPO_CD            XCHARACTER  1  TYPE  K,L      ...2
  2  DBKEY               INTEGER        TYPE  K,N      ...3
  2  SCODE               CHARACTER   4  TYPE  U,D      ...4
  2  SNAME               CHARACTER  30  TYPE  U,D      ...4
  2  TANKA               INTEGER        TYPE  U,D      ...4
  2  ZSURYO              INTEGER        TYPE  U,D      ...4

[説明]

  1. 更新対象の子レコード

  2. 親レコードのデータベースキーの構成要素

  3. 子レコードのデータベースキー(一連番号)

  4. ユーザデータの基本項目

埋込み変数の宣言例(データ部の作業場所節)
DATA  DIVISION.
WORKING-STORAGE  SECTION.
 
01  X_ZAIKO.                                  ...1
  02  CH_TENPO_CD      PIC X.                 ...2
  02  CH_DBKEY         PIC S9(8) COMP.        ...3
  02  SCODE            PIC X(4).              ...4
  02  SNAME            PIC X(30).             ...4
  02  TANKA            PIC S9(8) COMP.        ...4
  02  ZSURYO           PIC S9(8) COMP.        ...4

[説明]

  1. 更新対象のレコード型に対応する埋込み変数の集団項目を宣言します。

  2. 親レコードのデータベースキーの構成要素に対応する埋込み変数の基本項目を宣言します。

  3. 子レコードのデータベースキー(一連番号)に対応する埋込み変数の基本項目を宣言します。

  4. 子レコードのユーザデータに対応する埋込み変数の基本項目を宣言します。

埋込み変数の使用例(手続き部)
PROCEDURE DIVISION.
 
EXEC DML
  FETCH FOR UPDATE FIRST ZAIKO
    INTO :X_ZAIKO                    ...1
    WITHIN TENPO_ZAIKO
END-DML.
 
COMPUTE ZSURYO = ZSURYO + 1.         ...2
 
EXEC DML
  MODIFY ZAIKO FROM :X_ZAIKO         ...3
END-DML.

[説明]

下線の個所が埋込み変数です。

  1. FETCH文で更新対象のレコード実現値を検索し,位置づけとレコード実現値の取得をしています。FETCH文で検索したレコード実現値を受け取るために,埋込み変数X_ZAIKOを指定します。

  2. 更新する構成要素に対応する埋込み変数の基本項目に,更新値を設定します。このとき,埋込み変数の下位項目ZSURYOを使用します。

  3. MODIFY文で位置づけしたレコード実現値を更新しています。MODIFY文のFROM句の更新値に埋込み変数を指定します。

(4) レコードの格納処理で埋込み変数を使用する例

レコードの格納処理で埋込み変数を使用する例を説明します。

レコード型の定義例
RECORD TENPO                                            ...1
  2 DBKEY
   3 TENPO_CD            XCHARACTER  1  TYPE  K,L       ...2
  2  TENPO_NAME          CHARACTER  30  TYPE  U,D       ...3
RECORD ZAIKO                                            ...4
  2  TENPO_CD            XCHARACTER  1  TYPE  K,L       ...5
  2  DBKEY               INTEGER        TYPE  K,N       ...5
  2  SCODE               CHARACTER   4  TYPE  U,D       ...5
  2  SNAME               CHARACTER  30  TYPE  U,D       ...5
  2  TANKA               INTEGER        TYPE  U,D       ...5
  2  ZSURYO              INTEGER        TYPE  U,D       ...5

[説明]

  1. 格納するルートレコードのレコード型の定義

  2. ルートレコードのレコード型のデータベースキーの構成要素

  3. ルートレコードのレコード型のユーザデータの構成要素

  4. 格納する子レコードのレコード型の宣言

  5. 子レコードのレコード型のユーザデータの構成要素

埋込み変数の宣言例(データ部の作業場所節)
DATA  DIVISION.
WORKING-STORAGE  SECTION.
 
01  X_TENPO.                                ...1
  02  X_DBKEY. 
    03  X_TENPO_CD   PIC X.                 ...2
  02  X_TENPO_NAME   PIC X(30).             ...3
01  X_ZAIKO.                                ...4
  02  CH_TENPO_CD      PIC X. 
  02  CH_DBKEY         PIC S9(8) COMP. 
  02  SCODE            PIC X(4).            ...5
  02  SNAME            PIC X(30).           ...5 
  02  TANKA            PIC S9(8) COMP.      ...5
  02  ZSURYO           PIC S9(8) COMP.      ...5

[説明]

  1. 格納するルートレコードのレコード型に対応する埋込み変数の集団項目を宣言します。

  2. ルートレコードのデータベースキーの構成要素に対応する埋込み変数の基本項目を宣言します。

  3. ルートレコードのユーザデータの構成要素に対応する埋込み変数の基本項目を宣言します。

  4. 格納する子レコードのレコード型に対応する埋込み変数の集団項目を宣言します。

  5. 子レコードのユーザデータに対応する埋込み変数の基本項目を宣言します。

埋込み変数の使用例(手続き部)
PROCEDURE DIVISION.
MOVE  X'06'  TO X_TENPO_CD                   ...1
MOVE  'TOTSUKA SHITEN' TO X_TENPO_NAME.      ...2
 
EXEC DML
  STORE TENPO FROM :X_TENPO                  ...3
END-DML.
 
MOVE  'A001'     TO SCODE.                   ...4
MOVE  'PEN CASE' TO SNAME.                   ...4
MOVE  800       TO TANKA.                    ...4
MOVE  20        TO ZSURYO.                   ...4
 
EXEC DML
  STORE ZAIKO FROM :X_ZAIKO                  ...5
END-DML.

[説明]

ルートレコードTENPOを格納後,子レコードZAIKOを格納します。下線の個所が埋込み変数です。

  1. 格納するルートレコード実現値のデータベースキーを,ルートレコードのデータベースキーの構成要素に対応する埋込み変数の基本項目に設定します。

  2. 格納するルートレコード実現値のユーザデータを,ルートレコードのユーザデータの構成要素に対応する埋込み変数の基本項目に設定します。

  3. STORE文でルートレコードTENPOにレコード実現値を格納しています。STORE文のFROM句の格納値に埋込み変数を指定します。

  4. 格納する子レコード実現値のユーザデータを設定しています。子レコードのユーザデータの構成要素に対応する埋込み変数の基本項目に設定します。このとき,埋込み変数の下位項目SCODE,SNAME,〜を使用します。

  5. STORE文で子レコードZAIKOにレコード実現値を格納しています。STORE文のFROM句の格納値に埋込み変数を指定します。

(5) SDBデータベース節で指定する埋込み変数の使用例

SDBデータベース節で指定する次の埋込み変数を使用する例を説明します。

SDBデータベース節の宣言例
SDB-DATABASE  SECTION.
SDB DATABASE01
  RECORD NAME    RECNAME             ...1
  RECORD LENGTH  RECLENG             ...2
.

[説明]

  1. FETCH文,FIND文の正常終了後にレコード型名を受け取る埋込み変数を,RECORD NAME句に指定します。

  2. FETCH文,MODIFY文,STORE文の正常終了後にレコード長を受け取る埋込み変数を,RECORD LENGTH句に指定します。

埋込み変数の宣言例(主プログラムのデータ部の作業場所節)
DATA  DIVISION.
WORKING-STORAGE  SECTION.
 
01  RECNAME    PIC X(30) .           ...1
02  RECLENG    PIC S9(8) COMP.       ...2

[説明]

  1. RECORD NAME句に指定した埋込み変数をCHARCTER(30)のデータ型で宣言します。

  2. RECORD LENGTH句に指定した埋込み変数をINTEGERのデータ型で宣言します。

埋込み変数の使用例(手続き部)
PROCEDURE DIVISION.
 
EXEC DML
  FETCH FIRST TENPO INTO :X_TENPO
    WHERE ("DBKEY" = :Y_DBKEY)                     ...1
END-DML.
IF SQLCODE >= 0 AND SQLCODE NOT = 100              ...2
THEN
  DISPLAY 'FETCH RECORD NAME = "' RECNAME '"'      ...3
    UPON SYSOUT
  DISPLAY 'FETCH RECORD LENGTH = ' RECLENG         ...4
    UPON SYSOUT
ELSE
  DISPLAY SQLERRMC(1:SQLERRML) UPON SYSOUT
END-IF.

[説明]

上記は,FETCH文が正常終了した場合,FETCH文の対象としたレコード型のレコード型名とレコード長を参照する処理です。下線の個所が埋込み変数です。

  1. FETCH文を実行します。

  2. FETCH文が正常終了したかを判定します。

  3. FETCH文が正常終了した場合に,埋込み変数に設定されたレコード型名を参照する処理を行います。

  4. FETCH文が正常終了した場合に,埋込み変数に設定されたレコード長を参照する処理を行います。