这次连接数据库使用的是ODBC连接access数据库,里面主要是一个增删改查的模板备份,方便以后查询。
000001 IDENTIFICATION DIVISION.
000002 PROGRAM-ID. SAMPLEDB2.
000003*>****************************************************************
000004*> ALL RIGHTS RESERVED. COPYRIGHT (C) 2003, HITACHI, LTD.
000005*> LICENSED MATERIAL OF HITACHI, LTD.
000006*>****************************************************************
000007*>このサンプルプログラムは、COBOLプログラムの ODBCインタフェース
000008*>機能を使用してのプログラムコーディング例を示します。
000009*>
000010 ENVIRONMENT DIVISION.
000011 DATA DIVISION.
000012 WORKING-STORAGE SECTION.
000013*>データ部は、EXEC SQL BEGIN .... END-EXEC.と
000014*>EXEC SQL END .... END-EXEC.で囲んだ埋め込みSQL宣言節中の
000015*>データ名のみ手続部の SQL文で、使用可能です。
000016*>
000017 EXEC SQL BEGIN DECLARE SECTION END-EXEC.
000018*>
000019*>[ODBC Administrator]を使用して"サンプル"という名称の
000020*>データべースを作成しておいてください。
000021*>
000022*>ODBC連絡名
000023 01 ODBC-DSN PIC X(10) VALUE 'COTEST'.
000024*>連絡データベースユーザID
000025 01 ODBC-UID PIC X(10) VALUE 'SYSTEM'.
000026*>連絡データベースパスワード
000027 01 ODBC-PWD PIC X(10) VALUE 'SYS'.
000028*>データべースの表の列に対応するデータ定義を[ODBCレコード定義生成]
000029*>ツールを使用して作成しておいてください。
000030*>例えば、"SAMPLESC.cbl"ファイルに生成したなら次の様に
000031*>COPY文を記述してコピー展開してください。
000032*>
000033*> COPY SAMPLESC.
000034*>
000035*>例えば、SQL Serverで次のような表から生成したならば
000036*>CREATE TABLE pmbm ( bm varchar(1),
000037*> mc varchar(10),
000038*> bz varchar(10))
000039*>================================================================
000040 01 PMBM-REC.
000041 02 PMBM-BM PIC X(1).
000042 02 PMBM-MC PIC X(10).
000043 02 PMBM-BZ PIC X(10).
000044*>================================================================
000045*>このようなデータ定義となる。
000046 EXEC SQL END DECLARE SECTION END-EXEC.
000047 77 STMT-PROC PIC X(20).
000048 77 F-CUR-FLG PIC X(1).
000049 PROCEDURE DIVISION.
000050*===============================================================*
000051* メイン処理(0.0) *
000052*===============================================================*
000053 MAIN-SEC SECTION.
000054* 初期化処理
000055 PERFORM INIT-SEC.
000056* 業務主処理
000057 PERFORM PROC-SEC.
000058* 終了処理
000059 PERFORM END-SEC.
000060 MAIN-EXT.
000061 STOP RUN.
000062*===============================================================*
000063* 初期化処理 *
000064*===============================================================*
000065 INIT-SEC SECTION.
000066*>****************************************************************
000067*>制御系とする埋め込みSQL文は、例えば以下のように記述します。
000068*>****************************************************************
000069*>
000070*>接続/切断できたかどうかを<埋め込み例外宣言>にて判断します。
000071*>
000072 EXEC SQL
000073 WHENEVER SQLERROR PERFORM :ERROR-REC
000074 END-EXEC.
000075*>
000076*>データベースに接続する。
000077*>
000078 MOVE 'データベースへの接続' TO STMT-PROC.
000079 EXEC SQL
000080 CONNECT :ODBC-UID IDENTIFIED BY :ODBC-PWD
000081 USING :ODBC-DSN
000082 END-EXEC.
000083 INIT-EXT.
000084 EXIT.
000085*===============================================================*
000086* 業務主処理 *
000087*===============================================================*
000088 PROC-SEC SECTION.
000089 PERFORM DELETE-REC.
000090 PERFORM INSERT-REC.
000091 PERFORM SELECT-REC.
000092 PERFORM UPDATE-REC.
000093 PERFORM CURSOR-REC.
000094 PROC-EXT.
000095 EXIT.
000096*>****************************************************************
000097*>表中のデータを全て削除する。
000098*>****************************************************************
000099 DELETE-REC SECTION.
000100*>削除できたかどうかを<埋め込み例外宣言>にて判断します。
000101*>
000102 EXEC SQL
000103 WHENEVER SQLERROR PERFORM :ERROR-REC
000104 END-EXEC.
000105*>
000106 MOVE '表中の全データの削除' TO STMT-PROC.
000107 EXEC SQL
000108 DELETE FROM pmbm
000109 END-EXEC.
000110 PERFORM COMMIT-REC.
000111 DELETE-EXT.
000112 EXIT.
000113*>****************************************************************
000114*>表中にデータを挿入する。
000115*>****************************************************************
000116 INSERT-REC SECTION.
000117*>挿入できたかどうかを<埋め込み例外宣言>にて判断します。
000118*>
000119 EXEC SQL
000120 WHENEVER SQLERROR PERFORM :ERROR-REC
000121 END-EXEC.
000122*>
000123 MOVE 'サン一郎のデータ挿入1' TO STMT-PROC.
000124 MOVE 'a' TO PMBM-BM.
000125 MOVE 'Dong Jing' TO PMBM-MC.
000126 MOVE 'INSERT 1' TO PMBM-BZ.
000127 EXEC SQL
000128 INSERT
000129 INTO pmbm ( bm
000130 , mc
000131 , bz
000132 )
000133 VALUES ( :PMBM-BM
000134 , :PMBM-MC
000135 , :PMBM-BZ
000136 )
000137 END-EXEC.
000138 PERFORM COMMIT-REC.
000139*>
000140 MOVE 'サン一郎のデータ挿入2' TO STMT-PROC.
000141 MOVE 'b' TO PMBM-BM.
000142 MOVE 'Da Ban' TO PMBM-MC.
000143 MOVE 'INSERT 2' TO PMBM-BZ.
000144 EXEC SQL
000145 INSERT
000146 INTO pmbm ( bm
000147 , mc
000148 , bz
000149 )
000150 VALUES ( :PMBM-BM
000151 , :PMBM-MC
000152 , :PMBM-BZ
000153 )
000154 END-EXEC.
000155 PERFORM COMMIT-REC.
000156*>
000157 MOVE 'サン一郎のデータ挿入3' TO STMT-PROC.
000158 MOVE 'c' TO PMBM-BM.
000159 MOVE 'Fu Gang' TO PMBM-MC.
000160 MOVE 'INSERT 3' TO PMBM-BZ.
000161 EXEC SQL
000162 INSERT
000163 INTO pmbm ( bm
000164 , mc
000165 , bz
000166 )
000167 VALUES ( :PMBM-BM
000168 , :PMBM-MC
000169 , :PMBM-BZ
000170 )
000171 END-EXEC.
000172 PERFORM COMMIT-REC.
000173 INSERT-EXT.
000174 EXIT.
000175*>****************************************************************
000176*>表中のデータを参照する。
000177*>****************************************************************
000178 SELECT-REC SECTION.
000179*>データを取得できたかどうかを<埋め込み例外宣言>にて判断します。
000180 EXEC SQL
000181 WHENEVER NOT FOUND PERFORM :NOTFOUND-REC
000182 END-EXEC.
000183*>
000184 MOVE 'サン一郎のデータ参照' TO STMT-PROC.
000185 DISPLAY '参照のデータBM: '.
000186 ACCEPT PMBM-BM.
000187 EXEC SQL
000188 SELECT mc
000189 INTO :PMBM-MC
000190 FROM pmbm
000191 WHERE bm = :PMBM-BM
000192 END-EXEC.
000193 DISPLAY 'サン 一郎のMC:' PMBM-MC.
000194 SELECT-EXT.
000195 EXIT.
000196*>****************************************************************
000197*>表中のデータを更新する。
000198*>****************************************************************
000199 UPDATE-REC SECTION.
000200*>更新できたかどうかを<埋め込み例外宣言>にて判断します。
000201*>
000202 EXEC SQL
000203 WHENEVER SQLERROR PERFORM :ERROR-REC
000204 END-EXEC.
000205*>
000206 MOVE 'サン太郎のデータ更新' TO STMT-PROC.
000207 MOVE 'Bei Hai Dao' TO PMBM-MC.
000208 DISPLAY '更新のデータBM: '.
000209 ACCEPT PMBM-BM.
000210 EXEC SQL
000211 UPDATE pmbm
000212 SET mc = :PMBM-MC
000213 WHERE bm = :PMBM-BM
000214 END-EXEC.
000215 PERFORM COMMIT-REC.
000216 UPDATE-EXT.
000217 EXIT.
000218*>****************************************************************
000219*>表中の全データを参照する。
000220*>****************************************************************
000221 CURSOR-REC SECTION.
000222 MOVE '表中の全データの参照' TO STMT-PROC.
000223 PERFORM CRS00-REC.
000224 PERFORM OPEN-REC.
000225 PERFORM FETCH-REC UNTIL F-CUR-FLG = '1'.
000226 PERFORM CLOSE-REC.
000227 CURSOR-EXT.
000228 EXIT.
000229*>****************************************************************
000230*>CRS00カーソルを宣言します。
000231*>****************************************************************
000232 CRS00-REC SECTION.
000233*>CRS00を宣言できたかどうかを<埋め込み例外宣言>にて判断します。
000234*>
000235 EXEC SQL
000236 WHENEVER SQLERROR PERFORM :ERROR-REC
000237 END-EXEC.
000238*>
000239 MOVE 'CRS00カーソルの宣言' TO STMT-PROC.
000240 EXEC SQL
000241 DECLARE CRS00
000242 CURSOR FOR
000243 SELECT bm
000244 , mc
000245 , bz
000246 FROM pmbm
000247 END-EXEC.
000248 CRS00-EXT.
000249 EXIT.
000250*>****************************************************************
000251*>OPEN文にてカーソルを開く。
000252*>****************************************************************
000253 OPEN-REC SECTION.
000254*>CRS00を開くできたかどうかを<埋め込み例外宣言>にて判断します。
000255*>
000256 EXEC SQL
000257 WHENEVER SQLERROR PERFORM :ERROR-REC
000258 END-EXEC.
000259*>
000260 MOVE 'CRS00カーソルを開く' TO STMT-PROC.
000261 EXEC SQL
000262 OPEN CRS00
000263 END-EXEC.
000264 OPEN-EXT.
000265 EXIT.
000266*>****************************************************************
000267*>FETCH文にて値を取り出す。
000268*>****************************************************************
000269 FETCH-REC SECTION.
000270 EXEC SQL
000271 WHENEVER NOT FOUND PERFORM :NOTFOUND-REC
000272 END-EXEC.
000273 INITIALIZE PMBM-REC.
000274 EXEC SQL
000275 FETCH CRS00
000276 INTO :PMBM-BM
000277 , :PMBM-MC
000278 , :PMBM-BZ
000279 END-EXEC.
000280 IF F-CUR-FLG NOT = '1'
000281 DISPLAY 'bm:', PMBM-BM
000282 DISPLAY 'mc:', PMBM-MC
000283 DISPLAY 'bz:', PMBM-BZ
000284 ELSE
000285 CONTINUE
000286 END-IF.
000287 FETCH-EXT.
000288 EXIT.
000289*>****************************************************************
000290*>CLOSE文にてカーソルを閉じる。
000291*>****************************************************************
000292 CLOSE-REC SECTION.
000293*>CRS00を閉じできたかどうかを<埋め込み例外宣言>にて判断します。
000294*>
000295 EXEC SQL
000296 WHENEVER SQLERROR PERFORM :ERROR-REC
000297 END-EXEC.
000298*>
000299 MOVE 'CRS00カーソルを閉じ' TO STMT-PROC.
000300 EXEC SQL
000301 CLOSE CRS00
000302 END-EXEC.
000303 CLOSE-EXT.
000304 EXIT.
000305*===============================================================*
000306* 終了処理 *
000307*===============================================================*
000308 END-SEC SECTION.
000309*>データべースから切断する。
000310*>
000311 MOVE 'データべースから切断' TO STMT-PROC.
000312 EXEC SQL
000313 DISCONNECT
000314 END-EXEC.
000315*>
000316*>上記の<埋め込み例外宣言>の有効範囲の終わりを指示します。
000317*>
000318 EXEC SQL
000319 WHENEVER SQLERROR CONTINUE
000320 END-EXEC.
000321 END-EXT.
000322 EXIT.
000323*>****************************************************************
000324*>ERROR文にてコミットする。
000325*>****************************************************************
000326 ERROR-REC SECTION.
000327 DISPLAY STMT-PROC 'に失敗しました。'
000328 PERFORM ROLLBACK-REC.
000329 STOP RUN.
000330 ERROR-EXT.
000331 EXIT.
000332*>****************************************************************
000333*>NOT FOUND文にてコミットする。
000334*>****************************************************************
000335 NOTFOUND-REC SECTION.
000336 MOVE '1' TO F-CUR-FLG.
000337 NOTFOUND-EXT.
000338 EXIT.
000339*>****************************************************************
000340*>COMMIT文にてコミットする。
000341*>****************************************************************
000342 COMMIT-REC SECTION.
000343 EXEC SQL
000344 COMMIT WORK
000345 END-EXEC.
000346 COMMIT-EXT.
000347 EXIT.
000348*>****************************************************************
000349*>ROLLBACK文にてロールバックして、接続を解除する。
000350*>****************************************************************
000351 ROLLBACK-REC SECTION.
000352 EXEC SQL
000353 ROLLBACK WORK
000354 END-EXEC.
000355 EXEC SQL
000356 DISCONNECT
000357 END-EXEC.
000358 ROLLBACK-EXT.
000359 EXIT.
数据库异常处理语句:
000270 EXEC SQL
000271 WHENEVER NOT FOUND PERFORM :NOTFOUND-REC
000272 END-EXEC.