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

3.2.7 集団項目ホスト変数の記述方法

データベースの複数列を集団項目として操作できるホスト変数を、集団項目ホスト変数と呼びます。集団項目ホスト変数を宣言すると、集団項目に属する基本項目が、データベースの各列に対応するように扱われます。このとき、標識変数を使用する場合は、集団項目繰り返し標識変数を宣言します。集団項目ホスト変数に対応した標識変数定義を繰り返し記述できます。集団項目ホスト変数を指定する場合は、コンパイルオプションに-Gを指定する必要があります。

集団項目ホスト変数は、繰り返し指定ができます。集団項目ホスト変数に繰り返し指定を指定する場合は、コンパイルオプションに-E1を指定する必要があります。なお、-Gは省略できます。

集団項目ホスト変数をINSERT文に指定することにより、複数の行を一括して挿入することができます。

なお、集団項目ホスト変数や集団項目繰り返しホスト変数の宣言中に、別の集団項目ホスト変数や集団項目繰り返しホスト変数を入れ子で宣言することはできません。

以下に、コンパイルオプションの指定例と、集団項目ホスト変数の使用例を示します。

集団項目指定

1

集団項目を指定する場合のコンパイルオプションの指定例

SolarisLinuxSolaris/Linuxの場合

sqlcobol -G demo09main.scob -M -o ../bin/demo09 demo09sub.o

WindowsWindows(R)の場合

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

集団項目繰り返しホスト変数のコンパイルオプションの指定例

SolarisLinuxSolaris/Linuxの場合

sqlcobol -E1 demo09main.scob -M -o ../bin/demo09 demo09sub.o

WindowsWindows(R)の場合

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文に指定して、複数行のデータをデータベースに挿入します。