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
[説明]
-
ルートレコードのデータベースキーの集団項目
キーの条件の左辺に指定する構成要素です。
-
ルートレコードのデータベースキーの構成要素
-
- 埋込み変数の宣言例(データ部の作業場所節)
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
[説明]
-
検索対象のレコード型に対応する埋込み変数の集団項目を宣言します。
-
ルートレコードのデータベースキーの集団項目に対応する埋込み変数の集団項目を宣言します。
-
ルートレコードのデータベースキーの構成要素に対応する埋込み変数の基本項目を宣言します。
-
- 埋込み変数の使用例(手続き部)
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.
[説明]
下線の個所が埋込み変数です。
-
検索するレコード実現値のデータベースキーを埋込み変数に設定します。
-
データベースキーが条件値に指定した埋込み変数と一致するレコード実現値をFETCH文で検索して,レコード実現値を取得しています。条件式の右辺に,条件値を設定した埋込み変数を指定します。
-
検索するレコード実現値の範囲の下限であるデータベースキーを埋込み変数に設定します。
-
検索するレコード実現値の範囲の上限であるデータベースキーを埋込み変数に設定します。
-
データベースキーが条件値に指定した2つの埋込み変数の範囲にあるレコード実現値をFETCH文で検索して,レコード実現値を取得しています。範囲を指定するそれぞれの条件式の右辺に,条件値を設定した埋込み変数を指定します。
-
(2) 検索結果のレコード実現値を取得する際に埋込み変数を使用する例
(a) 例1
FETCH文で検索結果のレコード実現値を取得する際に埋込み変数を使用する例を説明します。
- レコード型(子レコード)の定義例
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
[説明]
-
検索対象の子レコード
-
親レコードのデータベースキーの構成要素
-
子レコードのデータベースキー(一連番号)
-
ユーザデータの基本項目
-
- 埋込み変数の宣言例(データ部の作業場所節)
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
[説明]
-
検索対象のレコード型に対応する埋込み変数の集団項目を宣言します。
-
親レコードのデータベースキーの構成要素に対応する埋込み変数の基本項目を宣言します。
-
子レコードのデータベースキー(一連番号)に対応する埋込み変数の基本項目を宣言します。
-
子レコードのユーザデータに対応する埋込み変数の基本項目を宣言します。
-
- 埋込み変数の使用例(手続き部)
PROCEDURE DIVISION. EXEC DML FETCH FIRST ZAIKO INTO :X_ZAIKO ...1 WITHIN TENPO_ZAIKO END-DML.
[説明]
下線の個所が埋込み変数です。
-
FETCH文でレコードを検索して,レコード実現値を取得しています。FETCH文のINTO句に,レコード実現値を受け取る埋込み変数を指定します。
-
(b) 例2
GET文でレコード実現値を取得する際に埋込み変数を使用する例を説明します。
- レコード型(子レコード)の定義例
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
[説明]
-
検索対象の子レコード
-
親レコードのデータベースキーの構成要素
-
子レコードのデータベースキー(一連番号)
-
ユーザデータの基本項目
-
- 埋込み変数の宣言例(データ部の作業場所節)
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
[説明]
-
検索対象のレコード型に対応する埋込み変数の集団項目を宣言します。
-
親レコードのデータベースキーの構成要素に対応する埋込み変数の基本項目を宣言します。
-
子レコードのデータベースキー(一連番号)に対応する埋込み変数の基本項目を宣言します。
-
子レコードのユーザデータに対応する埋込み変数の基本項目を宣言します。
-
- 埋込み変数の使用例(手続き部)
PROCEDURE DIVISION. EXEC DML FIND FIRST ZAIKO WITHIN TENPO_ZAIKO END-DML. EXEC DML GET ZAIKO INTO :X_ZAIKO ...1 END-DML.
[説明]
下線の個所が埋込み変数です。
-
FIND文で位置づけたレコード実現値を,GET文で取得しています。GET文の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
[説明]
-
更新対象の子レコード
-
親レコードのデータベースキーの構成要素
-
子レコードのデータベースキー(一連番号)
-
ユーザデータの基本項目
-
- 埋込み変数の宣言例(データ部の作業場所節)
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
[説明]
-
更新対象のレコード型に対応する埋込み変数の集団項目を宣言します。
-
親レコードのデータベースキーの構成要素に対応する埋込み変数の基本項目を宣言します。
-
子レコードのデータベースキー(一連番号)に対応する埋込み変数の基本項目を宣言します。
-
子レコードのユーザデータに対応する埋込み変数の基本項目を宣言します。
-
- 埋込み変数の使用例(手続き部)
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.
[説明]
下線の個所が埋込み変数です。
-
FETCH文で更新対象のレコード実現値を検索し,位置づけとレコード実現値の取得をしています。FETCH文で検索したレコード実現値を受け取るために,埋込み変数X_ZAIKOを指定します。
-
更新する構成要素に対応する埋込み変数の基本項目に,更新値を設定します。このとき,埋込み変数の下位項目ZSURYOを使用します。
-
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
[説明]
-
格納するルートレコードのレコード型の定義
-
ルートレコードのレコード型のデータベースキーの構成要素
-
ルートレコードのレコード型のユーザデータの構成要素
-
格納する子レコードのレコード型の宣言
-
子レコードのレコード型のユーザデータの構成要素
-
- 埋込み変数の宣言例(データ部の作業場所節)
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
[説明]
-
格納するルートレコードのレコード型に対応する埋込み変数の集団項目を宣言します。
-
ルートレコードのデータベースキーの構成要素に対応する埋込み変数の基本項目を宣言します。
-
ルートレコードのユーザデータの構成要素に対応する埋込み変数の基本項目を宣言します。
-
格納する子レコードのレコード型に対応する埋込み変数の集団項目を宣言します。
-
子レコードのユーザデータに対応する埋込み変数の基本項目を宣言します。
-
- 埋込み変数の使用例(手続き部)
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を格納します。下線の個所が埋込み変数です。
-
格納するルートレコード実現値のデータベースキーを,ルートレコードのデータベースキーの構成要素に対応する埋込み変数の基本項目に設定します。
-
格納するルートレコード実現値のユーザデータを,ルートレコードのユーザデータの構成要素に対応する埋込み変数の基本項目に設定します。
-
STORE文でルートレコードTENPOにレコード実現値を格納しています。STORE文のFROM句の格納値に埋込み変数を指定します。
-
格納する子レコード実現値のユーザデータを設定しています。子レコードのユーザデータの構成要素に対応する埋込み変数の基本項目に設定します。このとき,埋込み変数の下位項目SCODE,SNAME,〜を使用します。
-
STORE文で子レコードZAIKOにレコード実現値を格納しています。STORE文のFROM句の格納値に埋込み変数を指定します。
-
(5) SDBデータベース節で指定する埋込み変数の使用例
SDBデータベース節で指定する次の埋込み変数を使用する例を説明します。
-
RECORD NAME句で指定する埋込み変数
FETCH文,FIND文,GET文の正常終了後にレコード型名を受け取ります。
-
RECORD LENGTH句で指定する埋込み変数
FETCH文,MODIFY文,STORE文,GET文の正常終了後にレコード長を受け取ります。
- SDBデータベース節の宣言例
SDB-DATABASE SECTION. SDB DATABASE01 RECORD NAME RECNAME ...1 RECORD LENGTH RECLENG ...2 .
[説明]
-
FETCH文,FIND文,GET文の正常終了後にレコード型名を受け取る埋込み変数を,RECORD NAME句に指定します。
-
FETCH文,MODIFY文,STORE文,GET文の正常終了後にレコード長を受け取る埋込み変数を,RECORD LENGTH句に指定します。
-
- 埋込み変数の宣言例(主プログラムのデータ部の作業場所節)
DATA DIVISION. WORKING-STORAGE SECTION. 01 RECNAME PIC X(30) . ...1 02 RECLENG PIC S9(8) COMP. ...2
[説明]
-
RECORD NAME句に指定した埋込み変数をCHARCTER(30)のデータ型で宣言します。
-
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文の対象としたレコード型のレコード型名とレコード長を参照する処理です。下線の個所が埋込み変数です。
-
FETCH文を実行します。
-
FETCH文が正常終了したかを判定します。
-
FETCH文が正常終了した場合に,埋込み変数に設定されたレコード型名を参照する処理を行います。
-
FETCH文が正常終了した場合に,埋込み変数に設定されたレコード長を参照する処理を行います。
-