| Symfoware(R) Server RDBユーザーズガイド 応用プログラム開発編 - FUJITSU - |
目次
索引
![]()
|
第2章 データベースを処理する応用プログラムの開発の概要
2.2 SQL埋込みCOBOLプログラムの作成方法
ここでは、可変長文字列データをCOBOLプログラムのホスト変数で操作するプログラミング例を説明します。可変長文字列データを操作する場合は、文字列の長さが必要です。このため、データ操作を行うホスト変数は、可変長文字列の長さをもつ符号付き2進項目と、文字列自身をもつ英数字項目からなる集団項目の形式で定義します。
また、日本語可変長文字列のデータ操作も同様に行えます。
図:可変長文字列のデータ操作の例にプログラムの処理概要を示します。また、図:可変長文字列のデータ操作のプログラミング例にプログラミング例を示します。

(1) 電話番号の市外局番を、ホスト変数の可変長文字列に対話で入力します。
(2) CONNECT文により、データベース“DB01”の存在するサーバとコネクションを接続します。
(3) カーソル操作により、取引先会社表から入力された市外局番に該当する取引先会社のデータを検索します。
(4) 取引先会社のデータを出力します。
(5) DISCONNECT文により、データベース“DB01”の存在するサーバとコネクションを切断します。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE3.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
CONSOLE IS CONS.
DATA DIVISION.
WORKING-STORAGE SECTION.
*
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 SQLSTATE PIC X(5).
01 SQLMSG PIC X(255).
01 HCOMPWORD. …… (1)
49 HCOMP-L PIC S9(4) BINARY.
49 HCOMP-D PIC X(12).
01 HNUMBER PIC S9(9) BINARY.
01 HCOMPANY PIC N(10).
01 HAREACODE PIC X(12).
01 HLOCATION PIC N(10).
EXEC SQL END DECLARE SECTION END-EXEC.
*
01 FLAG1 PIC X.
01 COUNT1 PIC S9(4) BINARY.
01 COUNT2 PIC S9(9) BINARY.
01 WORK PIC X(12).
*
PROCEDURE DIVISION.
MAIN SECTION.
EXEC SQL DECLARE 取引先会社 TABLE ON BUSINESS END-EXEC. …… (2)
EXEC SQL DECLARE CSR1 CURSOR FOR …… (3)
SELECT * FROM 取引先会社
WHERE 電話番号 LIKE :HCOMPWORD END-EXEC.
DISPLAY " 入力された市外局番に該当する取引先会社のデータを"
" 取り出します.".
GET-TELNO.
DISPLAY " 市外局番を入力してください >> ".
ACCEPT HCOMP-D FROM CONS. …… (4)
DISPLAY " 市外局番" HCOMP-D UPON CONS.
DISPLAY " のデータでよろしいですか?".
DISPLAY " よろしかったら(Y/y)を入力してください >>".
ACCEPT FLAG1.
IF FLAG1 NOT = "Y" AND FLAG1 NOT = "y"
GO TO GET-TELNO
END-IF.
MOVE 0 TO COUNT1.
INSPECT HCOMP-D TALLYING COUNT1 FOR CHARACTERS BEFORE SPACE.
MOVE COUNT1 TO HCOMP-L. …… (5)
STRING HCOMP-D "%" DELIMITED BY SPACE INTO WORK. …… (6)
MOVE WORK TO HCOMP-D. …… (7)
ADD 1 TO HCOMP-L. …… (8)
EXEC SQL WHENEVER SQLERROR GOTO :CONNECT-ERROR END-EXEC.
EXEC SQL CONNECT TO 'DB01' END-EXEC. …… (9)
EXEC SQL WHENEVER SQLERROR GOTO :STM-ERROR END-EXEC.
EXEC SQL WHENEVER NOT FOUND GOTO :NOT-FOUND-ERROR END-EXEC.
EXEC SQL OPEN CSR1 END-EXEC. …… (10)
MOVE 0 TO COUNT2.
FETCH-CURSOR.
EXEC SQL FETCH CSR1 …… (11)
INTO :HNUMBER,:HCOMPANY,:HAREACODE,:HLOCATION END-EXEC.
ADD 1 TO COUNT2.
DISPLAY " 取引先番号 会社名 市外局番 所在地".
DISPLAY HNUMBER " " HCOMPANY " " HAREACODE " " HLOCATION. …… (12)
GO TO FETCH-CURSOR.
NOT-FOUND-ERROR.
IF COUNT2 NOT = 0 DISPLAY " 該当データは" COUNT2 "件です." …… (13)
ELSE DISPLAY " 該当データなし"
END-IF.
EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.
EXEC SQL ROLLBACK WORK END-EXEC. …… (14)
EXEC SQL DISCONNECT 'DB01' END-EXEC. …… (15)
MOVE 0 TO PROGRAM-STATUS.
EXIT PROGRAM.
STM-ERROR.
EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.
EXEC SQL ROLLBACK WORK END-EXEC. …… (16)
EXEC SQL DISCONNECT 'DB01' END-EXEC. …… (17)
EXIT PROGRAM.
CONNECT-ERROR.
DISPLAY "SQLSTATE :" SQLSTATE. …… (18)
DISPLAY "SQLMSG : " SQLMSG. …… (19)
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の内容を表示します。
目次
索引
![]()
|