Hitachi

SEWB+:SEWB+/CONSTRUCTION

テンプレート例

#NAME = 'データエントリ(サーバ)テンプレート'
#OWNER = 'SEWB+/CONSTRUCTION SAMPLE'
#OUTLINE = 'クライアント(SUP)から受信したデータを\n'
# 'サーバ上の顧客DB(oracle)に出力する。\n'
************************************************************
* All Rights Reserved, Copyright (C) 1996,1997,Hitachi,Ltd.*
* Licensed Material of Hitachi,Ltd. *
************************************************************
  @@interface
    @プログラムID = 
     {COMMENT = "プログラムIDを英字8文字で入力" }; 
  @@*
  @@interface
    @顧客DB =
     {ATTR = DB,
      COMMENT = "入力必須、RDBの表名を指定する",
      IO = OUT,
      表名 = {ATTR = TABLE_NAME },
      レコード名 = {ATTR = RECORD_NAME},
      ユーザID = {},
      パスワード = {},
      接頭語 = {COMMENT = "ファイルのPREFIXを入れる" } 
      };
  @@*
    @@interface 
    @RPC受信メッセージ = 
     {ATTR           = RPC_INPARM,
      COMMENT        = "RPC受信メッセージ",
      IO             = IN,
      入力データ     = {ATTR = RECORD_NAME}
      };
  @@*
  @@interface
    @RPC発信メッセージ = 
     {ATTR           = RPC_REPLY,
      COMMENT        = "RPC発信メッセージ",
      IO             = OUT,
      出力データ     = {ATTR = RECORD_NAME}  
      };
*
  IDENTIFICATION DIVISION.
   PROGRAM-ID. @プログラムID..
*
  DATA DIVISION.
*
   WORKING-STORAGE SECTION.
*
*      EXEC SQL INCLUDE SQLCA END-EXEC.
*
 EXEC SQL BEGIN DECLARE SECTION END-EXEC.
  77  ユーザID  PIC X(30).
  77  パスワード  PIC X(30).
 EXEC SQL END DECLARE SECTION END-EXEC.
  01   RDB-ERR  PIC X(44)  VALUE 
       'RDBアクセス時にエラーが発生しました。' .
*                                                
      EXEC SQL BEGIN DECLARE SECTION END-EXEC.
    @@expand @顧客DB[レコード名] PREFIX = "@顧客DB[接頭語].-";
      EXEC SQL END DECLARE SECTION END-EXEC.
*
   LINKAGE SECTION.
*
  01  INDATA.
     @@expand @RPC受信メッセージ[入力データ]  PREFIX = "IN-";
  01  INDATA-LEN  PIC S9(9) COMP.
  01  OUTDATA.
     @@expand @RPC発信メッセージ[出力データ]  PREFIX = "OUT-";
  01  OUTDATA-LEN  PIC S9(9) COMP.
*
  PROCEDURE DIVISION
            USING INDATA INDATA-LEN OUTDATA OUTDATA-LEN.
*
   PROGRAM-CONTROL SECTION.
    PROGRAM-RUN.
      PERFORM PROLOGUE
      PERFORM MAIN    
      PERFORM EPILOGUE .
*
    STOP-RUN-PROC.
      EXEC SQL 
       WHENEVER SQLERROR
       CONTINUE
      END-EXEC
      EXEC SQL
       COMMIT RELEASE
      END-EXEC
      EXEC SQL
       WHENEVER SQLERROR
       GO TO ABEND-PROC
      END-EXEC
      STOP RUN .
*
   PROLOGUE SECTION.
      EXEC SQL
       WHENEVER SQLERROR
       GO TO ABEND-PROC
      END-EXEC
      INITIALIZE ユーザID パスワード
      MOVE '@顧客DB[ユーザID]' TO ユーザID
      MOVE '@顧客DB[パスワード]' TO パスワード
      EXEC SQL                               
       CONNECT :ユーザID IDENTIFIED BY :パスワード  
      END-EXEC
      .
*
   EPILOGUE SECTION.
      EXEC SQL
      WHENEVER SQLERROR
       CONTINUE
      END-EXEC
      EXEC SQL
       WHENEVER SQLERROR
       GO TO ABEND-PROC
      END-EXEC
      .
*
   MAIN SECTION.
      PERFORM PROC-O1
      PERFORM WRITE-01
      .
*
   ABEND-PROC SECTION.
     DISPLAY RDB-ERR
      EXIT PROGRAM
      .
*
   WRITE-01 SECTION.
      @@set  @ITEM = @@itemlist(@顧客DB);
      @@set  @ITEM_CNT = @@count(@ITEM);
      EXEC SQL
        INSERT INTO @顧客DB[表名]
        VALUES
        ( :@顧客DB[接頭語]-@ITEM[1]
        @@set @I = 2;
        @@while ( @I <= @ITEM_CNT)
          ,:@顧客DB[接頭語].-@ITEM[@I]
          @@set @I = @I + 1;
        @@END;
        )
      END-EXEC
      INITIALIZE
      @@set @I = 1;
      @@while ( @I <= @ITEM_CNT)
        @顧客DB[接頭語].-@ITEM[@I] 
        @@set @I = @I + 1;
      @@END;
      .
*
   PROC-O1 SECTION.
      @@UOC "O1-出力加工処理";
      @@UOC "OUT-メッセージ編集";
      . 
*(データエントリ,SVR01)1