Symfoware Server アプリケーション開発ガイド(埋込みSQL編) - FUJITSU - |
目次 索引 |
付録B COBOL言語のサンプルプログラム |
ここでは、可変長文字列データをCOBOLプログラムのホスト変数で操作するプログラミング例を説明します。可変長文字列データを操作する場合は、文字列の長さが必要です。このため、データ操作を行うホスト変数は、可変長文字列の長さをもつ符号付き2進項目と、文字列自身をもつ英数字項目からなる集団項目の形式で定義します。
また、日本語可変長文字列のデータ操作も同様に行えます。
図:可変長文字列のデータ操作の例にプログラムの処理概要を示します。
(1) 電話番号の市外局番を、ホスト変数の可変長文字列に対話で入力します。
(2) CONNECT文により、データベース“DB01”の存在するサーバとコネクションを接続します。
(3) カーソル操作により、取引先会社表から入力された市外局番に該当する取引先会社のデータを検索します。
(4) 取引先会社のデータを出力します。
(5) DISCONNECT文により、データベース“DB01”の存在するサーバとコネクションを切断します。
以下にプログラミング例を示します。
000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. SAMPLE3. 000030 ENVIRONMENT DIVISION. 000040 CONFIGURATION SECTION. 000050 SPECIAL-NAMES. 000060 CONSOLE IS CONS. 000070 DATA DIVISION. 000080 WORKING-STORAGE SECTION. 000090* 000100 EXEC SQL BEGIN DECLARE SECTION END-EXEC. 000110 01 SQLSTATE PIC X(5). 000120 01 SQLMSG PIC X(255). 000130 01 HCOMPWORD. …… (1) 000140 49 HCOMP-L PIC S9(4) BINARY. 000150 49 HCOMP-D PIC X(12). 000160 01 HNUMBER PIC S9(9) BINARY. 000170 01 HCOMPANY PIC N(10). 000180 01 HTELNUMBER PIC X(12). 000190 01 HLOCATION PIC N(10). 000200 EXEC SQL END DECLARE SECTION END-EXEC. 000210* 000220 01 FLAG1 PIC X. 000230 01 COUNT1 PIC S9(4) BINARY. 000240 01 COUNT2 PIC S9(9) BINARY. 000250 01 WORK PIC X(12). 000260* 000270 PROCEDURE DIVISION. 000280 MAIN SECTION. 000290 EXEC SQL DECLARE 取引先会社 TABLE ON BUSINESS END-EXEC. …… (2) 000300 EXEC SQL DECLARE CSR1 CURSOR FOR …… (3) 000310 SELECT * FROM 取引先会社 000320 WHERE 電話番号 LIKE :HCOMPWORD END-EXEC. 000330 DISPLAY " 入力された市外局番に該当する取引先会社のデータを" 000340 " 取り出します.". 000350 GET-TELNO. 000360 DISPLAY " 市外局番を入力してください >> ". 000370 ACCEPT HCOMP-D FROM CONS. …… (4) 000380 DISPLAY " 市外局番" HCOMP-D UPON CONS. 000390 DISPLAY " のデータでよろしいですか?". 000400 DISPLAY " よろしかったら(Y/y)を入力してください >>". 000410 ACCEPT FLAG1. 000420 IF FLAG1 NOT = "Y" AND FLAG1 NOT = "y" 000430 GO TO GET-TELNO 000440 END-IF. 000450 MOVE 0 TO COUNT1. 000460 INSPECT HCOMP-D TALLYING COUNT1 FOR CHARACTERS BEFORE SPACE. 000470 MOVE COUNT1 TO HCOMP-L. …… (5) 000480 STRING HCOMP-D "%" DELIMITED BY SPACE INTO WORK. …… (6) 000490 MOVE WORK TO HCOMP-D. …… (7) 000500 ADD 1 TO HCOMP-L. …… (8) 000510 EXEC SQL WHENEVER SQLERROR GOTO :CONNECT-ERROR END-EXEC. 000520 EXEC SQL CONNECT TO 'DB01' END-EXEC. …… (9) 000530 EXEC SQL WHENEVER SQLERROR GOTO :STM-ERROR END-EXEC. 000540 EXEC SQL WHENEVER NOT FOUND GOTO :NOT-FOUND-ERROR END-EXEC. 000550 EXEC SQL OPEN CSR1 END-EXEC. …… (10) 000560 MOVE 0 TO COUNT2. 000570 FETCH-CURSOR. 000580 EXEC SQL FETCH CSR1 …… (11) 000590 INTO :HNUMBER,:HCOMPANY,:HTELNUMBER,:HLOCATION END-EXEC. 000600 ADD 1 TO COUNT2. 000610 DISPLAY " 取引先番号 会社名 電話番号 所在地". 000620 DISPLAY HNUMBER " " HCOMPANY " " HTELNUMBER" " HLOCATION. …… (12) 000630 GO TO FETCH-CURSOR. 000640 NOT-FOUND-ERROR. 000650 IF COUNT2 NOT = 0 DISPLAY " 該当データは" COUNT2 "件です." …… (13) 000660 ELSE DISPLAY " 該当データなし" 000670 END-IF. 000680 EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC. 000690 EXEC SQL ROLLBACK WORK END-EXEC. …… (14) 000700 EXEC SQL DISCONNECT 'DB01' END-EXEC. …… (15) 000710 MOVE 0 TO PROGRAM-STATUS. 000720 EXIT PROGRAM. 000730 STM-ERROR. 000740 EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC. 000750 EXEC SQL ROLLBACK WORK END-EXEC. …… (16) 000760 EXEC SQL DISCONNECT 'DB01' END-EXEC. …… (17) 000770 EXIT PROGRAM. 000780 CONNECT-ERROR. 000790 DISPLAY "SQLSTATE :" SQLSTATE. …… (18) 000800 DISPLAY "SQLMSG : " SQLMSG. …… (19) 000810 EXIT PROGRAM. |
(1) 市外局番を可変長文字列のホスト変数として定義します。
(2) 取引先会社を表宣言します。
(3) 取引先会社表のすべての列に対するカーソル“CSR1”を宣言します。
(4) 市外局番を対話入力します。市外局番は、可変長文字列データ用のホスト変数である集団項目“HCOMPWORD”の文字データ部“HCOMP-D”に入力します。
(5)〜(8) 入力した市外局番の長さを、可変長文字列データ用のホスト変数である集団項目“HCOMPWORD”の長さ部“HCOMP-L”に設定します。
(9) データベース“DB01”の存在するサーバとコネクションを接続します。
(10) カーソル“CSR1”をオープンします。
(11) 入力した市外局番と等しい市外局番の行にカーソルを位置づけ、その行を読み込みます。
(12) 読み込んだ行を表示します。
(13) 取引先会社表のデータがAT-ENDの場合は、検索結果を表示します。
(14) トランザクションをROLLBACK文により終了します。
(15) データベース“DB01”の存在するサーバとのコネクションを切断します。
(16) SQLの実行でエラーが発生した場合は、トランザクションをROLLBACK文により終了します。
(17) データベース“DB01”の存在するサーバとのコネクションを切断します。
(18) コネクションでエラーの場合は、SQLSTATEの内容を表示します。
(19) コネクションでエラーの場合は、SQLMSGの内容を表示します。
目次 索引 |