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

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

2.2.5 可変長文字列のデータ操作

ここでは、可変長文字列データを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"                                     
          GOTO  GET-TELNO.                                                            

(1) 市外局番を可変長文字列のホスト変数として定義します。

(2) 取引先会社を表宣言します。

(3) 取引先会社表のすべての列に対するカーソル“CSR1”を宣言します。

(4) 市外局番を対話入力します。市外局番は、可変長文字列データ用のホスト変数である集団項目 “HCOMPWORD”の文字データ部“HCOMP-D”に入力します。

     MOVE  0  TO  COUNT1.                                                          
     INSPECT HCOMP-D TALLYING COUNT1 FOR CHARACTERS BEFORE SPACE.                  
     MOVE  COUNT1 TO HCOMP-L.                                                *    
     STRING HCOMP-D "%" DELIMITED BY SPACE INTO WORK.                        *(5) 
     MOVE WORK TO HCOMP-D.ADD 1 TO HCOMP-L.                                                       *    
     EXEC SQL WHENEVER SQLERROR GOTO :CONNECT-ERROR END-EXEC.                      
     EXEC SQL CONNECT TO 'DB01' END-EXEC.                                    (6)   
     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.                                            (7)   
     MOVE  0  TO  COUNT2.                                                          
 FETCH-CURSOR.                                                                     
     EXEC SQL FETCH CSR1                                                     (8)   
        INTO :HNUMBER,:HCOMPANY,:HAREACODE,:HLOCATION  END-EXEC.                   
     ADD  1  TO  COUNT2.                                                           
     DISPLAY  "  取引先番号  会社名                市外局番    所在地".            
     DISPLAY  HNUMBER "   " HCOMPANY "  " HAREACODE "  " HLOCATION.          (9)   
     GOTO FETCH-CURSOR.                                                            
 NOT-FOUND-ERROR.                                                                  
     IF  COUNT2 NOT = 0  DISPLAY "   該当データは" COUNT2 "件です."          (10)  
       ELSE              DISPLAY  "  該当データなし".                              
     EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.                                 
     EXEC SQL ROLLBACK WORK END-EXEC.                                        (11)  
     EXEC SQL DISCONNECT 'DB01' END-EXEC.                                    (12)  
     MOVE  0  TO  PROGRAM-STATUS.                                                  
     EXIT PROGRAM.                                                                 
 STM-ERROR.                                                                        
     EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.                                 
     EXEC SQL ROLLBACK WORK END-EXEC.                                        (13)  
     EXEC SQL DISCONNECT 'DB01' END-EXEC.                                    (14)  
     EXIT PROGRAM.                                                                 
 CONNECT-ERROR.                                                                    
     DISPLAY  "SQLSTATE :"  SQLSTATE.                                        (15)  
     DISPLAY  "SQLMSG :  "  SQLMSG.                                          (16)  
     EXIT PROGRAM.                                                                 

(5) 入力した市外局番の長さを、可変長文字列データ用のホスト変数である集団項目“HCOMPWORD”の長さ部“HCOMP-L”に設定します。

(6) データベース“DB01”の存在するサーバとコネクションを接続します。

(7) カーソル“CSR1”をオープンします。

(8) 入力した市外局番と等しい市外局番の行にカーソルを位置づけ、その行を読み込みます。

(9) 読み込んだ行を表示します。

(10) 取引先会社表のデータがAT-ENDの場合は、検索結果を表示します。

(11) トランザクションをROLLBACK文により終了します。

(12) データベース“DB01”の存在するサーバとのコネクションを切断します。

(13) SQLの実行でエラーが発生した場合は、トランザクションをROLLBACK文により終了します。

(14) データベース“DB01”の存在するサーバとのコネクションを切断します。

(15) コネクションでエラーの場合は、SQLSTATEの内容を表示します。

(16) コネクションでエラーの場合は、SQLMSGの内容を表示します。


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

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