Symfoware Parallel Server RDBユーザーズガイド 応用プログラム開発編
目次 索引 前ページ次ページ

第2章 データベースを処理する応用プログラムの開発の概要> 2.2 SQL埋込みCOBOLプログラムの作成方法

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

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

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

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

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

 

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

■集団項目指

例1

集団項目を指定する場合の翻訳オプションの指定例

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

例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.               |                        
     02 HOST2   PIC N(10).                      *(1)集団項目ホスト変数の宣言
     02 HOST3   PIC S9(9) BINARY.               |                        
     02 HOST4   PIC S9(4) BINARY.               *                        
 01 G2.                                         *                        
     02 IND     PIC S9(4) BINARY OCCURS 4.      *集団項目繰返し標識変数  
     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             *(2)値の代入             
             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) 集団項目ホスト変数“G1”を定義します。

(2) 集団項目ホスト変数“G1”の各基本項目に対して、単一行SELECT文で、 データベースからデータを取り出します。

■集団項目繰返し指

例1

集団項目繰返しホスト変数の翻訳オプションの指定例

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

例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.               |                                  
        03 HOST1   PIC S9(4) BINARY.  |                                  
        03 HOST2   PIC X(10).         *(1)集団項目繰返しホスト変数の宣言 
        03 HOST3   PIC S9(9) BINARY.  |                                  
        03 HOST4   PIC S9(4) BINARY.  |                                  
 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.*集団項目繰返し標識変数の宣言  
     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)             *(2)複数行のINSERT     
                    FOR 3                         *                      
    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) 集団項目ホスト変数“G-REP”に対して、繰返し“OCCURS 3”を定義します。

(2) 繰返しの基本項目に値を設定しておいて、集団項目ホスト変数“G-REP”をINSERT文に指定して、複数行のデータをデータベースに挿入します。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2006