Hitachi

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


2.12.3 COBOLソースプログラムのコーディング例(DMLとSQLの両方を実行するUAPの場合)

DMLを記述した埋込み型UAP(SDBデータベースにアクセスする部分のUAP)のCOBOLソースプログラムのPADチャートとコーディング例を示します。DMLとSQLの両方を実行するUAPの例です。

〈この項の構成〉

(1) PADチャート

UAPのPADチャートを次の図に示します。

図2‒12 UAPのPADチャート

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

[図データ]

(2) コーディング例

次のCOBOLソースプログラムのコーディング例を説明します。

左端の番号は行番号を示しています。

■DMLを記述したCOBOLソースプログラム(UAPDML01)のコーディング例

1       IDENTIFICATION DIVISION.
2       PROGRAM-ID. UAPDML01.
3      *
4       ENVIRONMENT DIVISION.
5      *
6       INPUT-OUTPUT SECTION.
7       FILE-CONTROL.
8       SELECT O-FILE
9         ASSIGN TO './UAPDML01.log'
10         LINE SEQUENTIAL.
11       SELECT I-FILE
12         ASSIGN TO './UAPDML01.txt'
13         LINE SEQUENTIAL.
14       DATA DIVISION.
15       FILE SECTION.
16       FD  O-FILE             DATA RECORD OUTREC.
17       01  OUTREC             PIC X(132).
18       FD  I-FILE             DATA RECORD INREC.
19       01  INREC              PIC X(80).
20      *
21       SDB-DATABASE SECTION.                          -
22         SDB                  DATABASE01               |
23         RECORD NAME          RECNAME                  | 1.
24         RECORD LENGTH        RECLENG                  |
25         .                                            -
26      *
27       WORKING-STORAGE SECTION.
28      *
29       77  EOF                 PIC X VALUE '0'.
30       77  ERR-FLG             PIC X VALUE '0'.
31       77  TENPO_END           PIC X VALUE '0'.
32       77  ZAIKO_END           PIC X VALUE '0'.
33       77  TENPO_NOT_1ST       PIC X VALUE '0'.
34      *
35       77  REQSQL_CNCT        PIC X(4) VALUE 'CNCT'.
36       77  REQSQL_DISC        PIC X(4) VALUE 'DISC'.
37       77  REQSQL_COMT        PIC X(4) VALUE 'COMT'.
38       77  REQSQL_ROLB        PIC X(4) VALUE 'ROLB'.
39      *
40       77  RECNAME            PIC X(30)      VALUE SPACE.      ←2.
41       77  RECLENG            PIC S9(8) COMP VALUE ZERO.       ←2.
42      *
43       01  INREC_W.
44         02  IW_KUBUN         PIC X.
45         02  FILLER           PIC X(79).
46       01  INREC_R            REDEFINES INREC_W.
47         02  IR_KUBUN         PIC X.
48         02  FILLER           PIC X.
49         02  IR_KSN-KUBUN     PIC X.
50         02  FILLER           PIC X.
51         02  IR_TENPO_CD      PIC X.
52         02  FILLER           PIC X.
53         02  IR_TENPO_NAME    PIC X(30).
54       01  INREC_C            REDEFINES INREC_W.
55         02  IC_KUBUN         PIC X.
56         02  FILLER           PIC X.
57         02  IC_KSN-KUBUN     PIC X.
58         02  FILLER           PIC X.
59         02  IC_IO-KUBUN      PIC X.
60         02  FILLER           PIC X.
61         02  IC_TENPOID       PIC X.
62         02  FILLER           PIC X.
63         02  IC_SCODE         PIC X(4).
64         02  FILLER           PIC X.
65         02  IC_SNAME         PIC X(30).
66         02  FILLER           PIC X.
67         02  IC_SCOLOR        PIC X(10).
68         02  FILLER           PIC X.
69         02  IC_STANKA        PIC 9(10).
70         02  FILLER           PIC X.
71         02  IC_SSURYO        PIC 9(10).
72      *
73       01  TENPO.                                     ←3.
74         02  RT_DBKEY.
75           03  TENPO_CD       PIC X.
76         02  TENPO_NAME       PIC X(30).
77      *
78       01  ZAIKO.                                     ←4.
79         02  CH_TENPO_CD      PIC X.
80         02  CH_DBKEY         PIC S9(8) COMP.
81         02  SCODE            PIC X(4).
82         02  SNAME            PIC X(30).
83         02  SCOLOR           PIC X(10).
84         02  TANKA            PIC S9(8) COMP.
85         02  ZSURYO           PIC S9(8) COMP.
86      *
87       01  MIDASHI.
88         02  FILLER           PIC X(80) VALUE 
89                              '***   ZAIKO ICHIRAN   ***'.
90      *
91       01  O_TENPO.
92         02  FILLER           PIC X(15) VALUE '  TENPO CODE : '.
93         02  O_TENPO_CD       PIC X.
94         02  FILLER           PIC X(10) VALUE ', NAME : "'.
95         02  O_TENPO_NAME     PIC X(30).
96         02  FILLER           PIC X     VALUE '"'.
97      *
98       01  O_ZAIKO.
99         02  FILLER           PIC X(15) VALUE '  ZAIKO CODE : '.
100         02  O_ZAIKO_CODE     PIC X(4).
101         02  FILLER           PIC X(10) VALUE ', NAME : "'.
102         02  O_ZAIKO_NAME     PIC X(30).
103         02  FILLER           PIC X(11) VALUE '", COLOR : '.
104         02  O_ZAIKO_COLOR    PIC X(10).
105         02  FILLER           PIC X(10) VALUE ', TANKA : '.
106         02  O_ZAIKO_TANKA    PIC ZZZZZZZZ9.
107         02  FILLER           PIC X(11) VALUE ', SUURYO : '.
108         02  O_ZAIKO_SUURYO   PIC ZZZZZZZZ9.
109      *
110       01  ERR_MSG.
111         02  FILLER           PIC X(22) VALUE '***   ERROR SQLCODE : '.
112         02  EM_SQLCODE       PIC -ZZZZZZZZ9.
113         02  FILLER           PIC X(15) VALUE ', ERROR DML : "'.
114         02  EM_ERRDML        PIC X(30).
115         02  FILLER           PIC X(7) VALUE '"   ***'.
116      *
117       PROCEDURE DIVISION.
118       MAIN SECTION.
119       M-01.
120           MOVE 0 TO RETURN-CODE.
121           OPEN OUTPUT O-FILE.
122           OPEN INPUT  I-FILE.
123       M-02.
124           CALL  'UAPSQL01' USING REQSQL_CNCT.         ←5.
125           IF RETURN-CODE NOT = 0
126           THEN
127             MOVE '1' TO ERR-FLG
128           ELSE
129             PERFORM DB-KOUSHIN
130           END-IF.
131       M-03.
132           EVALUATE ERR-FLG
133             WHEN '0'
134               PERFORM FUTSUU
135             WHEN '1'
136               GO TO M-EXIT
137             WHEN '2'
138               PERFORM IJYOU                           ←6.
139           END-EVALUATE.
140       M-04.
141           CALL  'UAPSQL01' USING REQSQL_DISC.         ←7.
142       M-EXIT.
143           CLOSE O-FILE.
144           CLOSE I-FILE.
145           GOBACK.
146      *
147       DB-KOUSHIN SECTION.
148       D-01.
149           PERFORM UNTIL ( EOF = '1' OR ERR-FLG NOT = '0' )
150             READ I-FILE
151               AT END MOVE '1' TO EOF
152             END-READ
153             IF EOF = '0'
154             THEN
155               MOVE INREC TO INREC_W
156               IF IW_KUBUN = 'R'
157               THEN
158                 EVALUATE IR_KSN-KUBUN
159                   WHEN 'S'
160                     PERFORM TENPO-TSUIKA
161                   WHEN 'E'
162                     PERFORM TENPO-SAKUJO
163                 END-EVALUATE
164               ELSE
165                 MOVE IC_TENPOID TO TENPO_CD
166                 MOVE 'D-01:FIND TENPO' TO EM_ERRDML
167                 EXEC DML                                              -
168                   FIND FIRST "TENPO" WHERE ( "DBKEY" = :RT_DBKEY )     |8.
169                 END-DML                                               -
170                 IF SQLCODE = 0                     ←9.
171                   EVALUATE IC_KSN-KUBUN
172                     WHEN 'M'
173                       PERFORM ZAIKO-KOUSHIN
174                     WHEN 'S'
175                       PERFORM ZAIKO-TSUIKA
176                     WHEN 'E'
177                       PERFORM ZAIKO-SAKUJO
178                   END-EVALUATE
179                 ELSE
180                   MOVE '2' TO ERR-FLG
181                 END-IF
182               END-IF
183             END-IF
184           END-PERFORM.
185       D-02.
186           IF ERR-FLG = '0'
187           THEN
188             CALL  'UAPSQL01' USING REQSQL_COMT     ←10.
189             IF RETURN-CODE NOT = 0
190             THEN
191               MOVE '3' TO ERR-FLG
192             ELSE
193               CONTINUE
194             END-IF
195           ELSE
196             CONTINUE
197           END-IF.
198       D-EXIT.
199           EXIT.
200      *
201       ZAIKO-KOUSHIN SECTION.
202       M-01.
203           PERFORM ICHIDUKE.                          ←11.
204           IF ERR-FLG = '0'
205           THEN
206             IF IC_IO-KUBUN = '1'
207             THEN
208               COMPUTE ZSURYO = ZSURYO + IC_SSURYO    ←12.
209             ELSE
210               COMPUTE ZSURYO = ZSURYO - IC_SSURYO    ←12.
211             END-IF
212             MOVE 'M-01:MODIFY ZAIKO' TO EM_ERRDML
213             EXEC DML
214               MODIFY ZAIKO FROM :ZAIKO               ←13.
215             END-DML
216             IF SQLCODE NOT = 0                       ←9.
217             THEN
218               MOVE '2' TO ERR-FLG
219             ELSE
220               CONTINUE
221             END-IF
222           END-IF.
223       M-EXIT.
224           EXIT.
225      *
226       ZAIKO-TSUIKA SECTION.
227       S-01.
228           MOVE IC_TENPOID TO TENPO_CD.               ←14.
229           MOVE 0          TO CH_DBKEY.               ←15.
230           MOVE IC_SCODE   TO SCODE.                  -
231           MOVE IC_SNAME   TO SNAME.                   |
232           MOVE IC_SCOLOR  TO SCOLOR.                  |14.
233           MOVE IC_STANKA  TO TANKA.                   |
234           MOVE IC_SSURYO  TO ZSURYO.                 -
235       S-02.
236           MOVE 'S-02:STORE ZAIKO' TO EM_ERRDML.
237           EXEC DML
238             STORE ZAIKO FROM :ZAIKO                  ←16.
239           END-DML.
240           IF SQLCODE NOT = 0                         ←9.
241           THEN
242             MOVE '2' TO ERR-FLG
243           ELSE
244             CONTINUE
245           END-IF.
246       S-EXIT.
247           EXIT.
248      *
249       ZAIKO-SAKUJO SECTION.
250       E-01.
251           PERFORM ICHIDUKE.                          ←17.
252           IF ERR-FLG = '0'
253           THEN
254             MOVE 'E-01:ERASE ZAIKO' TO EM_ERRDML
255             EXEC DML
256               ERASE ZAIKO ALL                        ←18.
257             END-DML
258             IF SQLCODE NOT = 0                       ←9.
259             THEN
260               MOVE '2' TO ERR-FLG
261             ELSE
262               CONTINUE
263             END-IF
264           END-IF.
265       E-EXIT.
266           EXIT.
267      *
268       TENPO-TSUIKA SECTION.
269       A-01.
270           MOVE IR_TENPO_CD   TO TENPO_CD.            ←19.
271           MOVE IR_TENPO_NAME TO TENPO_NAME.          ←14.
272           MOVE 'A-01:STORE TENPO' TO EM_ERRDML
273           EXEC DML
274             STORE TENPO FROM :TENPO                  ←20.
275           END-DML.
276           IF SQLCODE NOT = 0                         ←9.
277           THEN
278             MOVE '2' TO ERR-FLG
279           ELSE
280             CONTINUE
281           END-IF.
282       A-EXIT.
283           EXIT.
284      *
285       TENPO-SAKUJO SECTION.
286       K-01.
287           MOVE IR_TENPO_CD   TO TENPO_CD.            ←21.
288           MOVE 'K-01:FIND TENPO' TO EM_ERRDML
289           EXEC DML
290             FIND FOR UPDATE FIRST TENPO              ←22.
291               WHERE ( "DBKEY" = :RT_DBKEY )          ←22.
292           END-DML.
293           IF SQLCODE = 0                             ←9.
294           THEN
295             MOVE 'K-01:ERASE TENPO' TO EM_ERRDML
296             EXEC DML
297               ERASE TENPO ALL                        ←23.
298             END-DML
299           ELSE
300             CONTINUE
301           END-IF.
302           IF SQLCODE NOT = 0                         ←9.
303           THEN  
304             MOVE '2' TO ERR-FLG
305           ELSE
306             CONTINUE
307           END-IF.
308       K-EXIT.
309           EXIT.
310      *
311       ICHIDUKE SECTION.
312       I-01.
313           MOVE 'I-01:FETCH ZAIKO 01' TO EM_ERRDML.
314           EXEC DML
315             FETCH FOR UPDATE FIRST ZAIKO             ←24.
316               INTO :ZAIKO WITHIN TENPO_ZAIKO
317           END-DML.
318           IF SQLCODE NOT = 0                         ←9.
319           THEN
320             MOVE '2' TO ERR-FLG
321           ELSE
322             CONTINUE
323           END-IF.
324           PERFORM UNTIL ( IC_SCODE = SCODE OR ERR-FLG NOT = '0' )
325             MOVE 'I-01:FETCH ZAIKO 02' TO EM_ERRDML
326             EXEC DML
327               FETCH FOR UPDATE NEXT ZAIKO            ←25.
328                 INTO :ZAIKO WITHIN TENPO_ZAIKO
329             END-DML
330             IF SQLCODE NOT = 0                       ←9.
331             THEN
332               MOVE '2' TO ERR-FLG
333             ELSE
334               CONTINUE
335             END-IF
336           END-PERFORM.
337       I-EXIT.
338           EXIT.
339      * 
340       FUTSUU SECTION.
341       F-01.
342           WRITE OUTREC FROM MIDASHI.
343           PERFORM UNTIL ( TENPO_END = '1' OR ERR-FLG NOT = '0'  )
344             MOVE 'F-01:FETCH TENPO' TO EM_ERRDML
345             IF TENPO_NOT_1ST = '0'
346             THEN
347               EXEC DML
348                 FETCH FIRST TENPO INTO :TENPO        ←26.
349               END-DML
350             ELSE
351               EXEC DML
352                 FETCH NEXT TENPO INTO :TENPO         ←27.
353               END-DML
354             END-IF
355             IF SQLCODE = 0                           ←9.
356             THEN
357               MOVE TENPO_CD   TO O_TENPO_CD
358               MOVE TENPO_NAME TO O_TENPO_NAME
359               WRITE OUTREC FROM O_TENPO
360               PERFORM UNTIL ( ZAIKO_END = '1' OR ERR-FLG NOT = '0' )
361                 MOVE 'F-01:FETCH ZAIKO' TO EM_ERRDML
362                 EXEC DML
363                   FETCH NEXT ZAIKO INTO :ZAIKO WITHIN TENPO_ZAIKO     ←28.
364                 END-DML
365                 IF SQLCODE = 0                                        ←9.
366                 THEN
367                   MOVE SCODE  TO O_ZAIKO_CODE                        -
368                   MOVE SNAME  TO O_ZAIKO_NAME                         |
369                   MOVE SCOLOR  TO O_ZAIKO_COLOR                       | 29.
370                   MOVE TANKA  TO O_ZAIKO_TANKA                        |
371                   MOVE ZSURYO TO O_ZAIKO_SUURYO                       |
372                   WRITE OUTREC FROM O_ZAIKO                          -
373                 ELSE 
374                   IF SQLCODE = 100                                   -
375                   THEN                                                | 30.
376                     MOVE '1' TO ZAIKO_END                            -
377                   ELSE
378                     MOVE '2' TO ERR-FLG
379                   END-IF
380                 END-IF
381               END-PERFORM
382               MOVE '1' TO TENPO_NOT_1ST
383               MOVE '0' TO ZAIKO_END
384             ELSE
385               IF SQLCODE = 100                -
386               THEN                             | 31.
387                 MOVE '1' TO TENPO_END         -
388               ELSE
389                 MOVE '2' TO ERR-FLG
390               END-IF
391             END-IF
392           END-PERFORM.
393       F-02.
394           IF ERR-FLG NOT = '0'
395           THEN
396             CALL  'UAPSQL01' USING REQSQL_ROLB      ←32.
397           ELSE
398             CONTINUE
399           END-IF.
400       F-EXIT.
401           EXIT.
402      *
403       IJYOU SECTION.
404       J-01.
405           MOVE SQLCODE TO EM_SQLCODE.               ←33.
406           WRITE OUTREC FROM ERR_MSG.                ←34.
407           WRITE OUTREC FROM SQLERRMC.               ←35.
408           WRITE OUTREC FROM INREC                   ←36.
409           CALL  'UAPSQL01' USING REQSQL_ROLB.       ←37.
410       J-EXIT.
411           EXIT. 

[説明]

  1. SDBデータベース節を指定します。

    • UAP内のDMLでアクセスするSDBデータベースを指定します。

    • DMLの実行後にレコード名を受け取る埋込み変数の名前を指定します。

    • DMLの実行後にレコード長を受け取る埋込み変数の名前を指定します。

    SDBデータベース節については,「2.3 SDBデータベース節の記述」を参照してください。

  2. 次の埋込み変数を宣言します。

    • SDBデータベース節のRECORD NAMEで指定した埋込み変数

    • SDBデータベース節のRECORD LENGTHで指定した埋込み変数

    SDBデータベース節で指定する埋込み変数の宣言については,「2.3.3 SDBデータベース節で指定する埋込み変数の宣言」を参照してください。

  3. レコード型TENPOとデータの受け渡しを行う埋込み変数を宣言します。

    埋込み変数の宣言については,「2.4 埋込み変数の宣言」を参照してください。

  4. レコード型ZAIKOとデータの受け渡しを行う埋込み変数を宣言します。

  5. HiRDBサーバに接続します。

    SQLのCONNECT文を実行してHiRDBサーバに接続します。SQLのCONNECT文は,DMLを記述したUAPソースプログラムとは別のUAPソースプログラム(UAPSQL01)に記述します。

  6. エラーが発生した場合,トランザクションの取り消し処理を行います。

  7. HiRDBサーバから切り離します。

    SQLのDISCONNECT文を実行してHiRDBサーバから切り離します。SQLのDISCONNECT文は,DMLを記述したUAPソースプログラムとは別のUAPソースプログラム(UAPSQL01)に記述します。

  8. ルートレコードのデータベースキーの一致するTENPOレコードに位置指示子を位置づけます。

    DML先頭子(EXEC DML)に続けてDMLを記述します。DMLの直後にDML終了子(END-DML)を記述します。

  9. SQLCODEを参照してDMLの実行結果を判定します。

    DMLの実行結果の判定については,「2.7 DMLの実行結果の判定処理」を参照してください。

  10. データベースの更新がすべて正常に終了した場合は,SQLのCOMMIT文でトランザクションをコミットします。DMLを記述したUAPソースプログラムとは別のUAPソースプログラム(UAPSQL01)にCOMMIT文を記述します。

  11. レコード実現値の変更前に,変更するレコードに対して位置指示子を位置づけます。

  12. 変更する構成要素に対応する埋込み変数に更新値を設定します。

  13. 位置づけしたZAIKOレコードのユーザデータを埋込み変数の値に変更します。

  14. 構成要素に対応する埋込み変数に格納するデータを設定します。

  15. 一連番号はHiRDB/SDが割り当てます。

  16. 親レコードTENPOへの位置づけ後に,子レコードZAIKOにレコード実現値を格納します。

  17. レコード実現値の削除前に,削除するレコードに対して位置指示子を位置づけます。

  18. 位置づけしたZAIKOレコードのレコード実現値を削除します。

  19. TENPOレコードはルートレコードのため,格納前にルートレコードのデータベースキーの値を埋込み変数に設定します。

  20. ルートレコードのTENPOレコードを格納します。

  21. キーの検索条件に指定する埋込み変数に,削除対象のルートレコードのデータベースキーの値を設定します。

  22. レコード実現値の削除前に,削除するレコードに対して位置指示子を更新指定で位置づけます。削除するレコードはキーの検索条件で指定します。

  23. 位置指示子が位置づけられているレコード実現値を削除します。下位レコードがある場合は,下位レコードも同時に削除されます。

  24. 子レコードZAIKOの検索は,親レコードTENPOの位置づけ後に行います。更新指定で先頭のZAIKOレコードへの位置づけを行い,レコード実現値を埋込み変数ZAIKOに取得します。

  25. 現在位置づけられているZAIKOレコードの次のレコードに更新指定で位置づけを行い,レコード実現値を埋込み変数ZAIKOに取得します。

  26. 先頭のTENPOレコードへの位置づけを行い,レコード実現値を埋込み変数TENPOに取得します。

  27. 現在位置づけられているTENPOレコードの次のレコードに位置づけを行い,レコード実現値を埋込み変数TENPOに取得します。

  28. ZAIKOレコードに位置づけがない場合は,先頭のZAIKOレコードに位置づけを行い,レコード実現値を埋込み変数ZAIKOに取得します。

    位置づけられている場合は,位置づけられているZAIKOレコードの次のレコードに位置づけを行い,レコード実現値を埋込み変数ZAIKOに取得します。

  29. 埋込み変数からレコード実現値を取り出します。

  30. SQLCODEが100かどうかを判定します。100の場合は,TENPOレコード下のすべてのZAIKOレコードの検索が完了しています。

  31. SQLCODEが100かどうかを判定します。100の場合は,すべてのTENPOレコードの検索が完了しています。

  32. SQLのROLLBACK文でトランザクションを取り消します。DMLを記述したUAPソースプログラムとは別のUAPソースプログラム(UAPSQL01)にROLLBACK文を記述します。

  33. エラー要因を取得するため,SQLCODEをエラーメッセージに含めます。

  34. エラーメッセージを出力します。

  35. HiRDBのエラーメッセージを出力します。

  36. エラーが発生した入力データを出力します。

  37. トランザクションを取り消します。SQLのROLLBACK文は,DMLを記述したUAPソースプログラムとは別のUAPソースプログラム(UAPSQL01)に記述します。

■SQLを記述したCOBOLソースプログラム(UAPSQL01)のコーディング例

1       IDENTIFICATION DIVISION.
2       PROGRAM-ID. UAPSQL01.
3      *
4       ENVIRONMENT DIVISION.
5      *
6       INPUT-OUTPUT SECTION.
7       FILE-CONTROL.
8       SELECT O-FILE
9         ASSIGN TO './CT0.log'
10         LINE SEQUENTIAL.
11       DATA DIVISION.
12       FILE SECTION.
13       FD  O-FILE             DATA RECORD OUTREC.
14       01  OUTREC              PIC X(132).
15      *
16       WORKING-STORAGE SECTION.
17      *
18      *****************************************************************
19      ***   REQCODE FOR UAPSQL01                                    ***
20      *****************************************************************
21       77  REQSQL_CNCT        PIC X(4) VALUE 'CNCT'.
22       77  REQSQL_DISC        PIC X(4) VALUE 'DISC'.
23       77  REQSQL_COMT        PIC X(4) VALUE 'COMT'.
24       77  REQSQL_ROLB        PIC X(4) VALUE 'ROLB'.
25      *
26      *
27      *****************************************************************
28      ***   MESSAGE                                                 ***
29      *****************************************************************
30       01  MSG-ERRREQ.
31         02  FILLER           PIC X(80) VALUE
32                                '>>>   INVALID REQSQL "'.
33         02  ERRREQ           PIC X(4).
34         02  FILLER           PIC X(80) VALUE '" SPECIFIED'.
35      *
36       01  ERRSQL.
37         02  FILLER           PIC X(28) VALUE
38                                '>>>   SQL ERROR, SQLCODE = "'.
39         02  ERRCODE          PIC -ZZZZZZZZZ9.
40         02  FILLER           PIC X(12) VALUE '", SQLSTMT "'.
41         02  ERRSTMT          PIC X(4).
42         02  FILLER           PIC X(1) VALUE '"'.
43      *
44       LINKAGE SECTION.
45       77  REQSQL             PIC X(4).
46      *
47       PROCEDURE DIVISION     USING REQSQL. ←実行するSQLのリクエストを引数で受け取ります
48      *
49           OPEN OUTPUT O-FILE.
50      *
51           MOVE REQSQL TO ERRSTMT.
52           MOVE 0 TO RETURN-CODE.
53      *
54           EVALUATE REQSQL                  ←リクエストで実行するSQLの振り分け
55           WHEN REQSQL_CNCT
56             PERFORM PROC-CNCT              ←CONNECT処理の実行
57           WHEN REQSQL_DISC
58             PERFORM PROC-DISC              ←DISCONNECT処理の実行
59           WHEN REQSQL_COMT
60             PERFORM PROC-COMT              ←COMMIT処理の実行
61           WHEN REQSQL_ROLB
62             PERFORM PROC-ROLB              ←ROLLBACK処理の実行
63           WHEN OTHER
64             MOVE REQSQL TO ERRREQ
65             DISPLAY  MSG-ERRREQ UPON SYSOUT
66             MOVE 99 TO RETURN-CODE
67             GO TO OWARI
68           END-EVALUATE.
69      *
70       OWARI.
71           CLOSE O-FILE.
72           GOBACK.
73      *
74      *****************************************************************
75      ***   CONNECT                                                 ***
76      *****************************************************************
77       PROC-CNCT SECTION.
78           EXEC SQL
79             CONNECT
80           END-EXEC.
81           IF SQLCODE < 0                 ←SQLの実行結果の判定
82           THEN
83             MOVE SQLCODE TO ERRCODE
84             DISPLAY  ERRSQL UPON SYSOUT
85             MOVE SQLCODE TO RETURN-CODE
86           ELSE
87             CONTINUE
88           END-IF.
89      *****************************************************************
90      ***   DISCONNECT                                              ***
91      *****************************************************************
92       PROC-DISC SECTION.
93           EXEC SQL
94             DISCONNECT
95           END-EXEC.
96           IF SQLCODE < 0                 ←SQLの実行結果の判定
97           THEN
98             MOVE SQLCODE TO ERRCODE
99             DISPLAY  ERRSQL UPON SYSOUT
100             MOVE SQLCODE TO RETURN-CODE
101           ELSE
102             CONTINUE
103           END-IF.
104      *****************************************************************
105      ***   COMMIT                                                  ***
106      *****************************************************************
107       PROC-COMT SECTION.
108           EXEC SQL
109             COMMIT
110           END-EXEC.
111           IF SQLCODE < 0                 ←SQLの実行結果の判定
112           THEN
113             MOVE SQLCODE TO ERRCODE
114             DISPLAY  ERRSQL UPON SYSOUT
115             MOVE SQLCODE TO RETURN-CODE
116           ELSE
117             CONTINUE
118           END-IF.
119      *****************************************************************
120      ***   ROLLBACK                                                ***
121      *****************************************************************
122       PROC-ROLB SECTION.
123           EXEC SQL
124             ROLLBACK
125           END-EXEC.
126           IF SQLCODE < 0                 ←SQLの実行結果の判定
127           THEN
128             MOVE SQLCODE TO ERRCODE
129             DISPLAY  ERRSQL UPON SYSOUT
130             MOVE SQLCODE TO RETURN-CODE
131           ELSE
132             CONTINUE
133           END-IF.