7.3.2 プログラム例題
COBOL言語による埋込み型UAPのプログラム例題を示します。
なお,SQLの文法の詳細については,マニュアル「HiRDB SQLリファレンス」を参照してください。
(1) 基本的な操作の例
(a) PADチャート
プログラム例題4のPADチャートを次の図に示します。
(b) コーディング例
プログラム例題4のコーディング例を次に示します。
000010*ZAIKO KANRI PROG. 000020* 000030* 000040* ALL RIGHTS RESERVED,COPYRIGHT (C)1997 HITACHI,LTD. 000050* LICENSED MATERIAL OF HITACHI,LTD. 000060* 000070 IDENTIFICATION DIVISION. 000080 PROGRAM-ID. ECOBUAP. 000090* 000100 ENVIRONMENT DIVISION. 000110 CONFIGURATION SECTION. 000120 SOURCE-COMPUTER. HITAC. 000130 OBJECT-COMPUTER. HITAC. 000140 INPUT-OUTPUT SECTION. 000150 FILE-CONTROL. 000160 SELECT INPUT-CARD-FILE 000170 ASSIGN TO DISK 000180 ORGANIZATION IS LINE SEQUENTIAL. 000190 SELECT PRINT-ZAIKO-FILE 000200 ASSIGN TO LP. 000210* 000220 DATA DIVISION. 000230 FILE SECTION. 000240 FD INPUT-CARD-FILE 000250 DATA RECORD USER-CARD-REC I-ZAIKO-REC. 000260* 000270 01 USER-CARD-REC. 000280 02 IUSERID PIC X(20). 000290 02 IPSWD PIC X(20). 000300 02 FILLER PIC X(40). 000310* 000320 01 I-ZAIKO-REC. 000330 02 IKUBUN PIC X(1). 000340 02 FILLER PIC X(2). 000350 02 ISCODE PIC X(4). 000360 02 FILLER PIC X(2). 000370 02 ISNAME PIC N(8). 000380 02 ICOL PIC N(1). 000390 02 ITANKA PIC X(9). 000400 02 IGRYO PIC X(9). 000410 02 IIOKBN PIC X(1). 000420 02 FILLER PIC X(34). 000430* 000440 FD PRINT-ZAIKO-FILE RECORDING MODE IS F 000450 LABEL RECORD IS OMITTED 000460 DATA RECORD PRINT-ZAIKO-REC. 000470 01 PRINT-ZAIKO-REC PIC X(132). 000480* 000490 WORKING-STORAGE SECTION. 000500* 000510 EXEC SQL 1 000520 BEGIN DECLARE SECTION 1 000530 END-EXEC. 1 000540 77 XUSERID PIC X(30). 1 000550 77 XPSWD PIC X(30). 1 000560 77 XSCODE PIC X(4) VALUE '0000'. 1 000570 77 XSNAME PIC N(8). 1 000580 77 XCOL PIC N(1). 1 000590 77 XTANKA PIC S9(9) COMP. 1 000600 77 XGRYO PIC S9(9) COMP. 1 000610* INDICATOR VARIABLE 1 000620 77 XISCODE PIC S9(4) COMP VALUE 1040. 1 000630 77 XISNAME PIC S9(4) COMP VALUE 1050. 1 000640 77 XICOL PIC S9(4) COMP VALUE 1060. 1 000650 77 XITANKA PIC S9(4) COMP VALUE 1070. 1 000660 77 XIGRYO PIC S9(4) COMP VALUE 1080. 1 000670* 1 000680* 1 000690 EXEC SQL 1 000700 END DECLARE SECTION 1 000710 END-EXEC. 1 000720* 000730 01 MIDASHI-REC. 000740 02 FILLER PIC X(13) VALUE SPACE. 000750 02 FILLER PIC X(32) 000760 VALUE '****** ZAIKO TABLE LIST ******'. 000770 02 FILLER PIC X(87) VALUE SPACE. 000780* 000790 01 RETSUMEI-REC. 000800 02 FILLER PIC X(14) VALUE SPACE. 000810 02 FILLER PIC X(9) VALUE 'SCODE'. 000820 02 FILLER PIC X(16) VALUE 'SNAME'. 000830 02 FILLER PIC X(8) VALUE 'COLOR'. 000840 02 FILLER PIC X(8) VALUE 'TANKA'. 000850 02 FILLER PIC X(8) VALUE 'SURYO'. 000860 02 FILLER PIC X(69) VALUE SPACE. 000870* 000880 01 LINE-REC. 000890 02 FILLER PIC X(14) VALUE SPACE. 000900 02 FILLER PIC X(9) VALUE '----- '. 000910 02 FILLER PIC X(16) VALUE '-------- '. 000920 02 FILLER PIC X(8) VALUE '------- '. 000930 02 FILLER PIC X(8) VALUE '------- '. 000940 02 FILLER PIC X(8) VALUE '------- '. 000950 02 FILLER PIC X(69) VALUE SPACE. 000960* 000970 01 SELECT-OUT-REC. 000980 02 FILLER PIC X(14) VALUE SPACE. 000990 02 O-SCODE PIC X(5). 001000 02 FILLER PIC X(2) VALUE SPACE. 001010 02 O-KANJI CHARACTER TYPE KEIS. 001020 03 O-SNAME PIC N(8). 001030 03 FILLER PIC X(2) VALUE SPACE. 001040 03 O-COL PIC N(1). 001050 03 FILLER PIC X(6) VALUE SPACE. 001060 03 O-TANKA PIC X(8) JUST RIGHT. 001070 03 FILLER PIC X(2) VALUE SPACE. 001080 03 O-GRYO PIC X(8) JUST RIGHT. 001090 03 FILLER PIC X(69) VALUE SPACE. 001100 77 O-SCODE-NULL PIC X(5) VALUE '*****'. 001110 77 O-SNAME-NULL PIC N(8) VALUE NC'−−−−−−'. 001120 77 O-COL-NULL PIC N(1) VALUE NC'−'. 001130 77 O-TANKA-NULL PIC X(8) VALUE '********'. 001140 77 O-GRYO-NULL PIC X(8) VALUE '********'. 001150* 001160 01 I-CARD-ERROR-REC. 001170 02 FILLER PIC X(14) VALUE SPACE. 001180 02 FILLER PIC X(41) 001190 VALUE '*** ERROR *** NO CARD FOR CONNECT ***'. 001200 02 FILLER PIC X(77) VALUE SPACE. 001210* 001220 01 CONNECT-ERROR-REC. 001230 02 FILLER PIC X(14) VALUE SPACE. 001240 02 FILLER PIC X(45) 001250 VALUE '*** ERROR *** CANNOT CONNECT *** CODE = '. 001260 02 CNCT-EC PIC X(5). 001270 02 FILLER PIC X(68) VALUE SPACE. 001280* 001290 01 NORMAL-END-REC. 001300 02 FILLER PIC X(14) VALUE SPACE. 001310 02 FILLER PIC X(22) 001320 VALUE '*** NORMAL ENDED ***'. 001330 02 FILLER PIC X(96) VALUE SPACE. 001340* 001350 01 SQLERR-PRINT-REC. 001360 02 FILLER PIC X(14) VALUE SPACE. 001370 02 FILLER PIC X(34) 001380 VALUE '*** HiRDB SQL ERROR MESSAGE-ID = '. 001390 02 RC-MSGID PIC X(8). 001400 02 FILLER PIC X(14) VALUE ' SQLERRORMC ='. 001500 02 RC-SQLERRMC PIC X(62). 001510* 001520 01 WSQLCODE PIC -(10)9. 001530* 001540 01 WMSGID. 001550 02 FILLER PIC X(8). 001560 02 MSGID PIC X(3). 001570* 001580 01 ERRORMSGID. 001590 02 FILLER PIC X(5) VALUE 'KFPA1'. 001600 02 E-MSGID PIC X(4). 001610 02 FILLER PIC X(2) VALUE '-E'. 001620* 001630 01 EOF PIC X(1) VALUE '0'. 001640 01 ERR-FLG PIC X(1) VALUE '0'. 001650* 001660* 001670 PROCEDURE DIVISION. 001680 MAIN SECTION. 001690 M-1. 001700 OPEN INPUT INPUT-CARD-FILE 001710 OUTPUT PRINT-ZAIKO-FILE. 001720 READ INPUT-CARD-FILE 001730 AT END 001740 MOVE '1' TO ERR-FLG 001750 GO TO M-3 001760 END-READ. 001770 MOVE IUSERID TO XUSERID. 001780 MOVE IPSWD TO XPSWD. 001790* 001800 EXEC SQL (a) 2 001810 WHENEVER SQLERROR (a) 2 001820 GO TO M-2 (a) 2 001830 END-EXEC. (a) 2 001840 EXEC SQL (b) 2 001850 CONNECT USER :XUSERID USING :XPSWD (b) 2 001860 END-EXEC. (b) 2 001870 PERFORM HENKOU. 001880 GO TO M-3. 001890 M-2. 001900 MOVE '2' TO ERR-FLG. 001910* 001920 M-3. 001930 EVALUATE ERR-FLG 001940 WHEN '0' 001950 PERFORM FUTSUU 001960 WHEN '1' 001970 WRITE PRINT-ZAIKO-REC 001980 FROM I-CARD-ERROR-REC 001990 AFTER ADVANCING 2 LINES 002000 WHEN '2' 002010 MOVE SQLCODE TO CNCT-EC 002020 WRITE PRINT-ZAIKO-REC 002030 FROM CONNECT-ERROR-REC 002040 AFTER ADVANCING 2 LINES 002050 WHEN '3' 002060 PERFORM IJYOU 002070 END-EVALUATE. 002080 M-4. 002090 CLOSE INPUT-CARD-FILE 002100 PRINT-ZAIKO-FILE. 002110 M-EX. 002120 EXEC SQL 002130 WHENEVER SQLERROR CONTINUE 002140 END-EXEC. 002150 EXEC SQL 002160 WHENEVER NOT FOUND CONTINUE 002170 END-EXEC 002180 EXEC SQL 002190 WHENEVER SQLWARNING CONTINUE 002200 END-EXEC. 002210 EXEC SQL 002220 DISCONNECT 002230 END-EXEC. 002240 GOBACK. 002250 HENKOU SECTION. 002260 H-1. 002270 READ INPUT-CARD-FILE 002280 AT END 002290 MOVE '1' TO ERR-FLG 002300 END-READ. 002310 EXEC SQL 002320 WHENEVER SQLERROR 002330 GO TO H-2 002340 END-EXEC. 002350 PERFORM UNTIL EOF = '1' OR ERR-FLG NOT = '0' 002360 EVALUATE IKUBUN 002370 WHEN 'I' 002380 PERFORM TSUIKA 002390 WHEN 'U' 002400 PERFORM KOUSHIN 002410 WHEN 'D' 002420 PERFORM SAKUJO 002430 END-EVALUATE 002440 READ INPUT-CARD-FILE 002450 AT END 002460 MOVE '1' TO EOF 002470 END-READ 002480 END-PERFORM. 002490 GO TO H-EX. 002500 H-2. 002510 MOVE '3' TO ERR-FLG. 002520 H-EX. 002530 EXIT. 002540* 002550 TSUIKA SECTION. 002560 T-1. 002570 MOVE ISCODE TO XSCODE. 002580 MOVE ISNAME TO XSNAME. 002590 MOVE ICOL TO XCOL. 002600 MOVE ITANKA TO XTANKA. 002610 MOVE IGRYO TO XGRYO. 002620 EXEC SQL 002610 WHENEVER SQLERROR GO TO T-2 002620 END-EXEC. 002630 EXEC SQL 3 002640 INSERT INTO ZAIKO(SCODE, SNAME, COL, TANKA, ZSURYO) 3 002650 VALUES(:XSCODE, :XSNAME, :XCOL, :XTANKA, :XGRYO) 3 002660 END-EXEC. 3 002670 GO TO T-EX. 002680 T-2. 002690 MOVE '3' TO ERR-FLG. 002700 T-EX. 002710 EXIT. 002720 KOUSHIN SECTION. 002730 K-1. 002740 MOVE ISCODE TO XSCODE. 002750 MOVE IGRYO TO XGRYO. 002760 EXEC SQL 002770 WHENEVER SQLERROR GO TO K-2 002780 END-EXEC. 002790 EVALUATE IIOKBN 002800 WHEN '1' 4 002810 EXEC SQL (a) 4 002820 UPDATE ZAIKO SET ZSURYO = ZSURYO + :XGRYO (a) 4 002830 WHERE SCODE=:XSCODE (a) 4 002840 END-EXEC (a) 4 002850 WHEN '2' 4 002860 EXEC SQL (b) 4 002870 UPDATE ZAIKO SET ZSURYO = ZSURYO - :XGRYO (b) 4 002880 WHERE SCODE=:XSCODE (b) 4 002890 END-EXEC (b) 4 002900 END-EVALUATE. 002910 GO TO K-EX. 002920 K-2. 002930 MOVE '3' TO ERR-FLG. 002940 K-EX. 002950 EXIT. 002960* 002970 SAKUJO SECTION. 002980 S-1. 002990 MOVE ISCODE TO XSCODE. 003010 EXEC SQL 003020 WHENEVER SQLERROR GO TO S-2 003030 END-EXEC. 003040 EXEC SQL 5 003050 DELETE FROM ZAIKO 5 003060 WHERE SCODE=:XSCODE 5 003070 END-EXEC. 5 003080 GO TO S-EX. 003090 S-2. 003100 MOVE '3' TO ERR-FLG. 003110 S-EX. 003120 EXIT. 003130* 003140 FUTSUU SECTION. 003150 F-0. 003160 WRITE PRINT-ZAIKO-REC 003170 FROM MIDASHI-REC 003180 AFTER ADVANCING 4 LINES. 003190 WRITE PRINT-ZAIKO-REC 003200 FROM RETSUMEI-REC 003210 AFTER ADVANCING 2 LINES. 003220 WRITE PRINT-ZAIKO-REC 003230 FROM LINE-REC 003240 AFTER ADVANCING 2 LINES. 003250 F-1. 003260 EXEC SQL 003270 WHENEVER SQLERROR GO TO F-4 003280 END-EXEC. 003290 EXEC SQL (a) 6 003300 DECLARE CR1 CURSOR FOR (a) 6 003310 SELECT SCODE,SNAME,COL,TANKA,ZSURYO FROM ZAIKO (a) 6 003320 END-EXEC. (a) 6 003330 EXEC SQL (b) 6 003340 OPEN CR1 (b) 6 003350 END-EXEC. (b) 6 003360 F-2. 003370 EXEC SQL (a) 7 003380 WHENEVER NOT FOUND (a) 7 003390 GO TO F-3 (a) 7 003400 END-EXEC. (a) 7 003410 EXEC SQL (b) 7 003420 FETCH CR1 (b) 7 003430 INTO :XSCODE:XISCODE, :XSNAME:XISNAME, (b) 7 003440 :XCOL:XICOL, :XTANKA:XITANKA, :XGRYO:XIGRYO (b) 7 003450 END-EXEC. (b) 7 003460 EXEC SQL 003470 WHENEVER NOT FOUND 003480 CONTINUE 003490 END-EXEC. 003500 IF XISCODE IS >= 0 THEN 003510 MOVE XSCODE TO O-SCODE 003520 ELSE 003530 MOVE O-SCODE-NULL TO O-SCODE 003540 END-IF. 003550 IF XISNAME IS >= 0 THEN 003560 MOVE XSNAME TO O-SNAME 003570 ELSE 003580 MOVE O-SNAME-NULL TO O-SNAME 003590 END-IF. 003600 IF XICOL IS >= 0 THEN 003610 MOVE XCOL TO O-COL 003620 ELSE 003630 MOVE O-COL-NULL TO O-COL 003640 END-IF. 003650 IF XITANKA IS >= 0 THEN 003660 MOVE XTANKA TO O-TANKA 003670 ELSE 003680 MOVE O-TANKA-NULL TO O-TANKA 003690 END-IF. 003700 IF XIGRYO IS >= 0 THEN 003710 MOVE XGRYO TO O-GRYO 003720 ELSE 003730 MOVE O-GRYO-NULL TO O-GRYO 003740 END-IF. 003750 WRITE PRINT-ZAIKO-REC 003760 FROM SELECT-OUT-REC 003770 AFTER ADVANCING 2 LINES. 003780 GO TO F-2. 003790 F-3. 003800 EXEC SQL 003810 WHENEVER SQLERROR CONTINUE 003820 END-EXEC. 003830 EXEC SQL 003840 WHENEVER NOT FOUND CONTINUE 003850 END-EXEC 003860 EXEC SQL 003870 WHENEVER SQLWARNING CONTINUE 003880 END-EXEC. 003890 EXEC SQL (a) 8 003900 CLOSE CR1 (a) 8 003910 END-EXEC. (a) 8 003920* 003930 EXEC SQL (b) 8 003940 COMMIT (b) 8 003950 END-EXEC. (b) 8 003960* 003970 WRITE PRINT-ZAIKO-REC 003980 FROM NORMAL-END-REC 003990 AFTER ADVANCING 2 LINES. 004000 GO TO F-EX. 004010 F-4. 004020 PERFORM IJYOU. 004030 F-EX. 004040 EXIT. 004050 IJYOU SECTION. 004060 I-1. 004070 MOVE SQLCODE TO WSQLCODE. 004080 MOVE WSQLCODE TO WMSGID. 004090 MOVE MSGID TO E-MSGID. 004100 MOVE ERRORMSGID TO RC-MSGID. 004110 MOVE SQLERRMC TO RC-SQLERRMC. 004120 WRITE PRINT-ZAIKO-REC 004130 FROM SQLERR-PRINT-REC 004140 AFTER ADVANCING 2 LINES. 004150 EXEC SQL (a) 9 004160 WHENEVER SQLERROR CONTINUE (a) 9 004170 END-EXEC. (a) 9 004180 EXEC SQL (a) 9 004190 WHENEVER NOT FOUND CONTINUE (a) 9 004200 END-EXEC. (a) 9 004210 EXEC SQL (a) 9 004220 WHENEVER SQLWARNING CONTINUE (a) 9 004230 END-EXEC. (a) 9 004240 EXEC SQL (b) 9 004250 ROLLBACK (b) 9 004260 END-EXEC. (b) 9 004270 I-EX. 004280 EXIT.
<説明>
-
埋込みSQL宣言節の始まりと終わり
UAP中で使用する変数を,BEGIN DECLARE SECTIONとEND DECLARE SECTIONとで囲んで,埋込みSQL宣言節の始まりと終わりを示します。
-
HiRDBとの接続
- (a) 特異状態発生時の指定
-
以下のSQLの実行後に,エラー(SQLERROR)が発生した場合の処理として,分岐先(M-2)を指定します。
- (b) HiRDBへの接続
-
HiRDBに認可識別子(XUSERID)及びパスワード(XPSWD)を連絡して,UAPがHiRDBを使用できる状態にします。
-
在庫表への行の追加
在庫表の各列に,埋込み変数に読み込まれた値を追加します。
-
在庫表の行の更新
- (a) 入庫
-
在庫表から,埋込み変数(:XGNO)に読み込んだ品番をキーとして,更新する行を検索します。検索した行の数量(SURYO)の値に,埋込み変数(:XSURYO)に読み込んだ値を加算して,行を更新します。
- (b) 在庫
-
在庫表から,埋込み変数(:XGNO)に読み込んだ品番をキーとして,更新する行を検索します。検索した行の数量(SURYO)の値に,埋込み変数(:XSURYO)に読み込んだ値を減算して,行を更新します。
-
在庫表の行の削除
在庫表から,埋込み変数(:XGNO)に読み込んだ品番をキーとして,それと等しいキーを持つ行を削除します。
-
カーソルCR1の宣言とオープン
- (a) カーソルCR1の宣言
-
在庫表(ZAIKO)の行を検索するために,カーソルCR1を宣言します。
- (b) カーソルCR1のオープン
-
在庫表(ZAIKO)の検索行の直前にカーソルを位置づけて,行を取り出せる状態にします。
-
在庫表の行の取り出し
- (a) 特異状態発生時の処理の指定
-
以下の在庫表の検索で,FETCH文で取り出す行がない場合(NOT FOUND)の処理として,分岐先(M-3)を指定します。
- (b) FETCH文の実行
-
在庫表(ZAIKO)から,カーソルCR1の示す行を1行取り出して,各埋込み変数に設定します。
-
トランザクションの終了
- (a) カーソルCR1のクローズ
-
カーソルCR1を閉じます。
- (b) トランザクションの終了
-
現在のトランザクションを正常終了させて,そのトランザクションによるデータベースへの追加,更新,削除の結果を有効にします。
-
トランザクションの取り消し
- (a) 特異状態発生時の処理の指定
-
以下のSQLの実行でエラー(SQLERROR)や警告(SQLWARNING)が発生した場合,何もしないで次の命令に進むことを指定します。
- (b) トランザクションの取り消し
-
現在のトランザクションを取り消して,そのトランザクションによるデータベースへの追加,更新,削除の結果を無効にします。
(2) 行インタフェースを使用した例
(a) PADチャート
プログラム例題5のPADチャートを次の図に示します。
(b) コーディング例
000010*************************************************************** 000020* * 000030* 埋込み型SQL COBOL UAP * 000040* ROW インタフェースサンプル * 000050* 1997/11/27 * 000060*************************************************************** 000070 IDENTIFICATION DIVISION. 000080 PROGRAM-ID. ROW-SAMPLE. 000090 AUTHOR. CLIENT. 000100 DATA-WRITTEN. 1997/11/27. 000110 DATA-COMPILED. ROW-SAMPLE. 000120 REMARKS. 000130* 000140 ENVIRONMENT DIVISION. 000150 CONFIGURATION SECTION. 000160 SOURCE-COMPUTER. HITAC. 000170 OBJECT-COMPUTER. HITAC. 000180 INPUT-OUTPUT SECTION. 000190 FILE-CONTROL. 000200 SELECT OUTLIST ASSIGN TO LP. 000210* 000220 DATA DIVISION. 000230 FILE SECTION. 000240 FD OUTLIST RECORDING MODE IS F 000250 LABEL RECORD IS OMITTED 000260 DATA RECORD OUTREC. 000270 01 OUTREC PIC X(80). 000280* 000290 WORKING-STORAGE SECTION. 000300 EXEC SQL 000310 BEGIN DECLARE SECTION 000320 END-EXEC. 000330 01 IN-REC1 IS GLOBAL. 000340 02 IN-CHR1 PIC X(15) VALUE 'EVA-00'. 000350 02 IN-INT1 PIC S9(9) COMP VALUE 255. 000360 02 IN-INT2 PIC S9(9) COMP VALUE 1. 000370 000380 01 XSQLROW IS GLOBAL. 1 000390 02 ROW-CHR1 PIC X(30). 1 000400 02 ROW-INT1 PIC S9(9) COMP. 1 000410 02 ROW-INT2 PIC S9(9) COMP. 1 000420 000430 EXEC SQL 000440 END DECLARE SECTION 000450 END-EXEC. 000460 000470 01 DISP-REC IS GLOBAL. 000480 02 DISP-CHR1 PIC X(15). 000490 02 DISP-INT1 PIC S9(9). 000500 02 DISP-INT2 PIC S9(4). 000510 01 ERRFLG PIC S9(4) COMP IS GLOBAL. 000520 000530 01 MSG-ERR PIC X(10) VALUE '!! ERROR'. 000540 01 MSG-CODE IS GLOBAL. 000550 02 FILLER PIC X(15) VALUE '!! SQLCODE ='. 000560 02 MSG-SQLCODE PIC S9(9) DISPLAY. 000570 01 MSG-MC IS GLOBAL. 000580 02 FILLER PIC X(15) VALUE '!! SQLERRMC ='. 000590 02 MSG-SQLERRMC PIC X(100). 000600 000610 PROCEDURE DIVISION. 000620********************************************** 000630* DISPLAY TITLE 000640********************************************** 000650 MAIN SECTION. 000660 CALL 'DISPLAY-TITLE'. 000670 MOVE ZERO TO ERRFLG. 000680 000690********************************************** 000700* CONNECT 000710********************************************** 000720 EXEC SQL 000730 WHENEVER SQLERROR GOTO ERR-EXIT 000740 END-EXEC 000750 000760 DISPLAY '***** CONNECT '. 000770 EXEC SQL 2 000780 CONNECT 2 000790 END-EXEC. 2 000800 DISPLAY '***** CONNECT : END'. 000810 000820********************************************************* 000830* INIT 000840********************************************************* 000850 DISPLAY '## テーブルの初期化を行います'. 000860 CALL 'INIT-TABLE'. 000870 IF ERRFLG < ZERO 000880 GO TO ERR-EXIT 000890 END-IF 000900 DISPLAY '## 正常です'. 000910 000920********************************************************* 000930* INSERT 000940********************************************************* 000950 DISPLAY '## DATAをINSERT'. 000960 CALL 'TEST-INSERT'. 000970 IF ERRFLG < ZERO 000980 GO TO ERR-EXIT 000990 END-IF 001000 DISPLAY '## 正常です'. 001010 001020********************************************************* 001030* ROW 001040********************************************************* 001050 DISPLAY '## ROW型のテストを行います'. 001060 CALL 'TEST-ROW'. 001070 IF ERRFLG < ZERO 001080 GO TO ERR-EXIT 001090 END-IF 001100 DISPLAY '## 正常です'. 001110 001120********************************************************* 001130* DISCONNECT 001140********************************************************* 001150 ERR-EXIT. 001160 IF SQLCODE < ZERO 001170 MOVE SQLCODE TO MSG-SQLCODE 001180 MOVE SQLERRMC TO MSG-SQLERRMC 001190 DISPLAY MSG-ERR 001200 DISPLAY MSG-CODE 001210 DISPLAY MSG-MC 001220 MOVE -1 TO ERRFLG 001230 END-IF 001240 001250 EXEC SQL 001260 WHENEVER SQLERROR CONTINUE 001270 END-EXEC 001280 EXEC SQL 001290 WHENEVER NOT FOUND CONTINUE 001300 END-EXEC 001310 EXEC SQL 001320 WHENEVER SQLWARNING CONTINUE 001330 END-EXEC 001340 001350 DISPLAY '##DISCONNECT' 001360 001370 EXEC SQL 3 001380 DISCONNECT 3 001390 END-EXEC 3 001400 STOP RUN. 001410 001420************************************************************ 001430* INSERT文のテスト 001440************************************************************ 001450 IDENTIFICATION DIVISION. 001460 PROGRAM-ID. TEST-INSERT. 001470 DATA DIVISION. 001480 WORKING-STORAGE SECTION. 001490 01 DCNT PIC S9(9) COMP. 001500 PROCEDURE DIVISION. 001510 EXEC SQL 001520 WHENEVER SQLERROR GOTO :Exit-Test-Insert 001530 END-EXEC. 001540********************************************************* 001550* INSERT HOST 001560********************************************************* 001570 DISPLAY '***** 埋込み変数によるINSERT start' 001580 MOVE ZERO TO DCNT. 001590 INSERT-LOOP. 001600 COMPUTE IN-INT1 = DCNT 001610 COMPUTE IN-INT2 = DCNT + 100 001620 COMPUTE DCNT = DCNT + 1 001630 EXEC SQL 4 001640 INSERT INTO TT1(CLM1, 4 001650 CLM2, 4 001660 CLM3) 4 001670 VALUES (:IN-CHR1, 4 001680 :IN-INT1, 4 001690 :IN-INT2) 4 001700 END-EXEC 4 001710 IF DCNT < 20 THEN 001720 GO TO INSERT-LOOP 001730 END-IF 001740 DISPLAY '***** insert : SUCCESS'. 001750********************************************************* 001760* 001770********************************************************* 001780 EXIT-TEST-INSERT. 001790 IF SQLCODE < ZERO 001800 MOVE SQLCODE TO MSG-SQLCODE 001810 MOVE SQLERRMC TO MSG-SQLERRMC 001820 DISPLAY MSG-CODE 001830 DISPLAY MSG-MC 001840 MOVE -1 TO ERRFLG 001850 END-IF 001860 DISPLAY '>> TEST-INSERT <<' 001870 GOBACK. 001880****************************************************** 001890* WARNING 001900****************************************************** 001910 INSERT-WARNING. 001920 DISPLAY 'WARINING' 001930 MOVE SQLCODE TO MSG-SQLCODE 001940 MOVE SQLERRMC TO MSG-SQLERRMC 001950 DISPLAY MSG-CODE 001960 DISPLAY MSG-MC. 001970 END PROGRAM TEST-INSERT. 001980 001990****************************************************** 002000* ROWのテスト 002010****************************************************** 002020 IDENTIFICATION DIVISION. 002030 PROGRAM-ID. TEST-ROW. 002040 DATA DIVISION. 002050 WORKING-STORAGE SECTION. 002060 PROCEDURE DIVISION. 002070 DISPLAY '***** ROW CURSOR OPEN' 002080 EXEC SQL 5 002090 DECLARE CUR_ROW CURSOR FOR 5 002100 SELECT ROW FROM TT1 5 002110 WHERE CLM2 = 10 5 002120 FOR UPDATE OF CLM3 5 002130 END-EXEC 5 002140****************************************************** 002150* ROW CURSOR 002160****************************************************** 002170 DISPLAY '***** ROW CURSOR OPEN'. 002180 EXEC SQL 002190 WHENEVER SQLERROR GOTO :Exit-Test-ROW 002200 END-EXEC 002210 EXEC SQL 6 002220 OPEN CUR_ROW 6 002230 END-EXEC 6 002240 002250****************************************************** 002260* FETCH ROW CURSOR 002270****************************************************** 002280 DISPLAY '***** ROW CURSOR FETCH' 002290 EXEC SQL 002300 WHENEVER NOT FOUND GOTO :Exit-Test-ROW 002310 END-EXEC 002320 EXEC SQL 002330 WHENEVER SQLERROR GOTO :Exit-Test-ROW 002340 END-EXEC 002350 MOVE SPACE TO XSQLROW 002360 EXEC SQL 7 002370 FETCH CUR_ROW INTO :XSQLROW 7 002380 END-EXEC 7 002390 DISPLAY '## FETCH DATA' 002400 MOVE ROW-CHR1 TO DISP-CHR1 002410 MOVE ROW-INT1 TO DISP-INT1 002420 MOVE ROW-INT2 TO DISP-INT2 002430 DISPLAY DISP-REC 002440 002450 DISPLAY '***** ROW UPDATE' 002460 MOVE 'ANGEL' TO ROW-CHR1 002470 EXEC SQL 8 002480 UPDATE TT1 SET ROW = :XSQLROW 8 002490 WHERE CURRENT OF CUR_ROW 8 002500 END-EXEC 8 002510 002520****************************************************** 002530* FETCH ROW CURSOR 002540****************************************************** 002550 DISPLAY '***** ROW CURSOR CLOSE' 002560 EXEC SQL 002570 WHENEVER NOT FOUND CONTINUE 002580 END-EXEC 002590 EXEC SQL 002600 WHENEVER SQLERROR CONTINUE 002610 END-EXEC 002620 EXEC SQL 9 002630 CLOSE CUR_ROW 9 002640 END-EXEC. 9 002650****************************************************** 002660* 002670****************************************************** 002680 EXIT-TEST-ROW. 002690 IF SQLCODE < ZERO THEN 002700 MOVE SQLCODE TO MSG-SQLCODE 002710 MOVE SQLERRMC TO MSG-SQLERRMC 002720 DISPLAY MSG-CODE 002730 DISPLAY MSG-MC 002740 MOVE -1 TO ERRFLG 002750 END-IF 002760 EXEC SQL 002770 WHENEVER NOT FOUND CONTINUE 002780 END-EXEC 002790 EXEC SQL 002800 WHENEVER SQLERROR CONTINUE 002810 END-EXEC 002820 EXEC SQL 002830 COMMIT 002840 END-EXEC 002850 DISPLAY '>> TEST-ROW END <<' 002860 GOBACK. 002870 002880****************************************************** 002890* WARNING 002900****************************************************** 002910 ROW-WARNING. 002920 DISPLAY 'WARINING' 002930 MOVE SQLCODE TO MSG-SQLCODE 002940 MOVE SQLERRMC TO MSG-SQLERRMC 002950 DISPLAY MSG-CODE 002960 DISPLAY MSG-MC. 002970 END PROGRAM TEST-ROW. 002980 002990 003000 ***************************************************** 003010 * テーブルの初期化 003020 ***************************************************** 003030 IDENTIFICATION DIVISION. 003040 PROGRAM-ID. INIT-TABLE. 003050 DATA DIVISION. 003060 WORKING-STORAGE SECTION. 003070 PROCEDURE DIVISION. 003080 EXEC SQL 003090 WHENEVER SQLERROR CONTINUE 003100 END-EXEC 003110 003120***************************************************** 003130* DROP TABLE 003140***************************************************** 003150 DISPLAY '***** DROP TABLE'. 003160 EXEC SQL 10 003170 DROP TABLE TT1 10 003180 END-EXEC 10 003190 DISPLAY '***** CREATE SCHEMA'. 003200 EXEC SQL 11 003210 CREATE SCHEMA 11 003220 END-EXEC 11 003230 003240********************************************************* 003250* COMMIT 003260********************************************************* 003270 DISPLAY '***** COMMIT START'. 003280 EXEC SQL 003290 WHENEVER SQLERROR GOTO EXIT-INIT-TABLE 003300 END-EXEC 003310 EXEC SQL 003320 COMMIT 003330 END-EXEC 003340 DISPLAY '***** COMMIT : END'. 003350 003360********************************************************* 003370* CREATE TABLE 003380********************************************************* 003390 DISPLAY '***** create table'. 003400 EXEC SQL 12 003410 CREATE FIX TABLE TT1(CLM1 CHAR(30), 12 003420 CLM2 INTEGER, 12 003430 CLM3 INTEGER) 12 003440 END-EXEC 12 003450 003460 DISPLAY '***** create table : SUCCESS'. 003470 003480****************************************************** 003490* 003500****************************************************** 003510 EXIT-INIT-TABLE. 003520 IF SQLCODE < ZERO THEN 003530 MOVE SQLCODE TO MSG-SQLCODE 003540 MOVE SQLERRMC TO MSG-SQLERRMC 003550 DISPLAY MSG-CODE 003560 DISPLAY MSG-MC 003570 MOVE -1 TO ERRFLG 003580 END-IF 003590 GOBACK. 003600 003610****************************************************** 003620* WARNING 003630****************************************************** 003640 INIT-TABLE-WARNING. 003650 DISPLAY 'WARINING' 003660 MOVE SQLCODE TO MSG-SQLCODE 003670 MOVE SQLERRMC TO MSG-SQLERRMC 003680 DISPLAY MSG-CODE 003690 DISPLAY MSG-MC. 003700 END PROGRAM INIT-TABLE. 003710 003720****************************************************** 003730* DISPLAY 003740****************************************************** 003750 IDENTIFICATION DIVISION. 003760 PROGRAM-ID. DISPLAY-TITLE. 003770 DATA DIVISION. 003780 WORKING-STORAGE SECTION. 003790 PROCEDURE DIVISION. 003800 DISPLAY '##############################################' 003810 DISPLAY '# #' 003820 DISPLAY '# このプログラムはROW型インタフェースの #' 003830 DISPLAY '# サンプルプログラムです #' 003840 DISPLAY '# #' 003850 DISPLAY '##############################################'. 003860 END PROGRAM DISPLAY-TITLE. 003870 END PROGRAM ROW-SAMPLE.
<説明>
-
ROW型の埋込み変数の宣言
行インタフェースで使用する埋込み変数(:XSQLROW)を宣言します。
-
HiRDBへの接続
環境変数PDUSERに定義されている認可識別子とパスワードを使用して,サーバに接続します。
-
HiRDBの切り離し
UAPをサーバから切り離します。
-
行の追加
FIX表(TT1)にデータを追加します。
-
カーソルCUR_ROWの宣言
行インタフェースを使用してFIX表(TT1)を検索するので,カーソルCUR_ROWを宣言します。
-
カーソルCUR_ROWのオープン
FIX表(TT1)の検索行の直前にカーソルを位置づけて,各行を取り出せる状態にします。
-
行の取り出し
FIX表(TT1)から,カーソルCUR_ROWの示す行を1行取り出し,埋込み変数(:XSQLROW)に設定します。
-
行の更新
カーソルCUR_ROWが位置づけられているFIX表(TT1)の行を,埋込み変数(:XSQLROW)の値で更新します。
-
カーソルCUR_ROWのクローズ
カーソルCUR_ROWを閉じます。
-
表(TT1)を削除する
FIX表(TT1)を作成するために,同名の表があった場合は削除します。
-
スキーマの生成
スキーマがないときのために,スキーマを生成します。
-
FIX表(TT1)の作成
FIX表(TT1)を作成します。行インタフェースはFIX属性の表に対してだけ使用できます。
(3) TYPE句,TYPEDEF句,及びSAME AS句を使用した例
TYPE句,TYPEDEF句,及びSAME AS句を使用したコーディング例を次に示します。
000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. CBL001. 000300 DATA DIVISION. 000400 WORKING-STORAGE SECTION. 000500 EXEC SQL BEGIN DECLARE SECTION END-EXEC. 000600* -- type declaration -- 000700 01 VCHR20 TYPEDEF. 000800 05 LEN PIC S9(4) COMP. 000900 05 STR PIC X(20). 001000 001100* -- data declaration -- 001200 01 D-4C. 001300 05 XCUT TYPE VCHR20. 001400 05 XCOLOR PIC X(10). 001500 05 XCLARITY SAME AS XCOLOR. 001600 05 XCARAT PIC S9(4) COMP. 001700 001800 EXEC SQL END DECLARE SECTION END-EXEC. : : : : 002000 PROCEDURE DIVISION. 002100 CB_001 SECTION. : : : : 003400 INS-1. 003500 EXEC SQL 003600 INSERT INTO A_DIM (C1, C2, C3, C4) 003700 VALUES (:XCUT, :XCOLOR, :XCLARITY, :XCARAT) 003800 END-EXEC. : : : : 005000 INS-EX. 005100 EXIT. 005200 END PROGRAM CBL001.