ページの先頭行へ戻る
Symfoware Server V10.0.0/V10.0.1 アプリケーション開発ガイド(埋込みSQL編)

B.1 可変長文字列のデータ操作例

ここでは、可変長文字列データをCOBOLプログラムのホスト変数で操作するプログラミング例を説明します。可変長文字列データを操作する場合は、文字列の長さが必要です。このため、データ操作を行うホスト変数は、可変長文字列の長さをもつ符号付き2進項目と、文字列自身をもつ英数字項目からなる集団項目の形式で定義します。

また、日本語可変長文字列のデータ操作も同様に行えます。

図B.1 可変長文字列のデータ操作の例にプログラムの処理概要を示します。

図B.1 可変長文字列のデータ操作の例

(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の内容を表示します。