Symfoware Server アプリケーション開発ガイド(埋込みSQL編) - FUJITSU - |
目次 索引 |
第3章 アプリケーションの作成 | > 3.2 SQL埋込みCOBOLプログラムの作成方法 |
データベースの複数列を集団項目として操作できるホスト変数を、集団項目ホスト変数と呼びます。集団項目ホスト変数を宣言すると、集団項目に属する基本項目が、データベースの各列に対応するように扱われます。このとき、標識変数を使用する場合は、集団項目繰り返し標識変数を宣言します。集団項目ホスト変数に対応した標識変数定義を繰り返し記述できます。集団項目ホスト変数を指定する場合は、コンパイルオプションに-Gを指定する必要があります。
集団項目ホスト変数は、繰り返し指定ができます。集団項目ホスト変数に繰り返し指定を指定する場合は、コンパイルオプションに-E1を指定する必要があります。なお、-Gは省略できます。
集団項目ホスト変数をINSERT文に指定することにより、複数の行を一括して挿入することができます。
なお、集団項目ホスト変数や集団項目繰り返しホスト変数の宣言中に、別の集団項目ホスト変数や集団項目繰り返しホスト変数を入れ子で宣言することはできません。
以下に、コンパイルオプションの指定例と、集団項目ホスト変数の使用例を示します。
例1
集団項目を指定する場合のコンパイルオプションの指定例
sqlcobol -G demo09main.scob -M -o ../bin/demo09 demo09sub.o
sqlcobol -G demo09main.scob -M -o ..\bin\demo09.exe demo09sub.obj
例2
集団項目ホスト変数の使用例
WORKING-STORAGE SECTION. EXEC SQL BEGIN DECLARE SECTION. 01 SQLSTATE PIC X(5). 01 SQLMSG PIC X(255). 01 G1. 02 HOST1 PIC S9(4) BINARY. …… (1) 02 HOST2 PIC N(10). …… (2) 02 HOST3 PIC S9(9) BINARY. …… (3) 02 HOST4 PIC S9(4) BINARY. …… (4) 01 G2. 02 IND PIC S9(4) BINARY OCCURS 4. …… (5) EXEC SQL END DECLARE SECTION. PROCEDURE DIVISION. * 変数初期化 INITIALIZE SQLSTATE. INITIALIZE SQLMSG. INITIALIZE G1. INITIALIZE G2. * SQL呼出し EXEC SQL SELECT COL1, COL2, COL3, COL4 INTO :G1 :G2 FROM S.T1 …… (6) WHERE COL1= 100 END-EXEC. * DISPLAY "COL1=" HOST1. DISPLAY "IND= " IND(1). DISPLAY "COL2=" HOST2. DISPLAY "IND= " IND(2). DISPLAY "COL3=" HOST3. DISPLAY "IND= " IND(3). DISPLAY "COL4=" HOST4. DISPLAY "IND= " IND(4). :(1)〜(4) 集団項目ホスト変数“G1”を定義します。
(5) 集団項目繰り返し標識変数を定義します。
(6) 集団項目ホスト変数“G1”の各基本項目に対して、単一行SELECT文で、データベースからデータを取り出します。
例1
集団項目繰り返しホスト変数のコンパイルオプションの指定例
sqlcobol -E1 demo09main.scob -M -o ../bin/demo09 demo09sub.o
sqlcobol -E1 demo09main.scob -M -o ..\bin\demo09 demo09sub.obj
例2
集団項目繰り返しホスト変数および複数行の一括挿入の使用例
WORKING-STORAGE SECTION. EXEC SQL BEGIN DECLARE SECTION. 01 SQLSTATE PIC X(5). 01 SQLMSG PIC X(255). 01 CTR PIC S9(4) BINARY. 01 G1. 02 G-REP OCCURS 3. …… (1) 03 HOST1 PIC S9(4) BINARY. …… (2) 03 HOST2 PIC X(10). …… (3) 03 HOST3 PIC S9(9) BINARY. …… (4) 03 HOST4 PIC S9(4) BINARY. …… (5) 01 G2. 02 HOST1 PIC S9(4) BINARY. 02 HOST2 PIC X(10). 02 HOST3 PIC S9(9) BINARY. 02 HOST4 PIC S9(4) BINARY.01 G3. 02 IND PIC S9(4) BINARY OCCURS 4. …… (6) EXEC SQL END DECLARE SECTION. PROCEDURE DIVISION. * 変数初期化 INITIALIZE SQLSTATE. INITIALIZE SQLMSG. INITIALIZE G1. INITIALIZE G2. INITIALIZE G3. * 値の設定 PERFORM TEST BEFORE VARYING CTR FROM 1 BY 1 UNTIL CTR > 3 COMPUTE HOST1 OF G-REP OF G1(CTR) = CTR END-PERFORM. * MOVE "AAA" TO HOST2 OF G-REP OF G1(1). MOVE "BBB" TO HOST2 OF G-REP OF G1(2). MOVE "CCC" TO HOST2 OF G-REP OF G1(3). * COMPUTE HOST3 OF G-REP OF G1(1) = 11111111. COMPUTE HOST3 OF G-REP OF G1(2) = 22222222. COMPUTE HOST3 OF G-REP OF G1(3) = 33333333. * COMPUTE HOST4 OF G-REP OF G1(1) = 1111. COMPUTE HOST4 OF G-REP OF G1(2) = 2222. COMPUTE HOST4 OF G-REP OF G1(3) = 3333. * INSERT EXEC SQL INSERT INTO S.T(COL1,COL2,COL3,COL4) VALUES(:G1.G-REP) FOR 3 …… (7) END-EXEC. * カーソル宣言 EXEC SQL DECLARE CU1 CURSOR FOR SELECT COL1,COL2,COL3,COL4 FROM S.T WHERE COL1 < 100 END-EXEC. * EXEC SQL OPEN CU1 END-EXEC. * PERFORM TEST BEFORE VARYING CTR FROM 1 BY 1 UNTIL CTR > 3 * FETCH EXEC SQL FETCH CU1 INTO :G2 INDICATOR :G3 END-EXEC * DISPLAY DISPLAY "COL1=" HOST1 OF G2 DISPLAY "IND= " IND(1) DISPLAY "COL2=" HOST2 OF G2 DISPLAY "IND= " IND(2) DISPLAY "COL3=" HOST3 OF G2 DISPLAY "IND= " IND(3) DISPLAY "COL4=" HOST4 OF G2 DISPLAY "IND= " IND(4) END-PERFORM. :(1)〜(5) 集団項目繰り返しホスト変数を宣言します。
集団項目ホスト変数“G-REP”に対して、繰り返し“OCCURS 3”を定義します。
(6) 集団項目繰り返し標識変数を宣言します。
(7) 複数行のINSERT文を実行します。
繰り返しの基本項目に値を設定しておいて、集団項目ホスト変数“G-REP”をINSERT文に指定して、複数行のデータをデータベースに挿入します。
目次 索引 |