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

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

2.2.7 マルチスレッド環境におけるデータ操作

ここでは、マルチスレッド環境で動作する応用プログラムを開発する方法について説明します。

マルチスレッド環境の概要、マルチスレッド環境で動作する応用プログラムの作成の流れ、およびセションとスレッドの関係については、“マルチスレッド環境におけるデータ操作”を参照してください。

■マルチスレッド環境で動作する応用プログラムの

マルチスレッド環境で動作する応用プログラムの例を以下に示します。以下の例におけるスレッドは、すでに他の応用プログラムで起動されているものとします。

  @OPTIONS ALPHAL(WORD)
  IDENTIFICATION DIVISION.
  PROGRAM-ID.   sub_threadB.
  ENVIRONMENT DIVISION.
  DATA DIVISION.
  WORKING-STORAGE SECTION.
      EXEC SQL BEGIN DECLARE SECTION END-EXEC.
  01 SQLSTATE PIC X(5).                                           …… (1)
  01 SQLMSG   PIC X(255).
      EXEC SQL END   DECLARE SECTION END-EXEC.
  01 ret    PIC S9(4) BINARY.
  LINKAGE SECTION.
  01 ses_id PIC S9(9) COMP-5.
  PROCEDURE DIVISION USING ses_id.

      INITIALIZE SQLSTATE.
      INITIALIZE SQLMSG.

      CALL "SQLThrStartID" USING BY VALUE ses_id RETURNING ret.      …… (2)
      IF ret = 0 THEN
          DISPLAY "SQLThrStartIDエラー"
          EXIT PROGRAM
      END-IF.

      EXEC SQL WHENEVER SQLERROR GO TO :CONNECT_ERROR END-EXEC.
      EXEC SQL
             CONNECT TO 'SI_DB333'                                …… (3)
      END-EXEC.
      DISPLAY "CONNECT(SQLSTATE) = " SQLSTATE.
      DISPLAY "CONNECT(SQLMSG) = " SQLMSG.

      EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.

      EXEC SQL
              INSERT INTO SI_SCHM1.SI_TABLE2                     …… (4)
                     VALUES(1,1,1,1,1,1,1,1,1,1,'R','DD','BBBB')
      END-EXEC.
      DISPLAY "INSERT(SQLSTATE) = " SQLSTATE.
      DISPLAY "INSERT(SQLMSG) = " SQLMSG.

      EXEC SQL
             COMMIT WORK                                         …… (5)
      END-EXEC.
      DISPLAY "COMMIT(SQLSTATE) = " SQLSTATE.
      DISPLAY "COMMIT(SQLMSG) = " SQLMSG.

      EXEC SQL
             DISCONNECT ALL                                      …… (6)
      END-EXEC.
      DISPLAY "DISCONNECT(SQLSTATE) = " SQLSTATE.
      DISPLAY "DISCONNECT(SQLMSG) = " SQLMSG.

      CALL "SQLThrEndID" USING BY VALUE ses_id RETURNING ret.    …… (7)
      IF ret = 0 THEN
          DISPLAY "SQLThrEndIDエラー"
          EXIT PROGRAM
      END-IF.

      EXIT PROGRAM.

  CONNECT_ERROR.                                                …… (8)
      DISPLAY "CONNECT(SQLSTATE) = " SQLSTATE.
      DISPLAY "CONNECT(SQLMSG) = " SQLMSG.
      CALL "SQLThrEndID" USING BY VALUE ses_id RETURNING ret.
      EXIT PROGRAM.

(1) SQLSTATEとSQLMSGを宣言します。

(2) セションを開始します。セションを開始する関数を実行することにより、セションとスレッド(sub_threadB)が対応付けられます。

(3) サーバとコネクションを接続します。

(4) INSERT文を実行して値を挿入します。

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

(6) サーバとのコネクションを切断します。

(7) セションを終了します。

(8) サーバとのコネクションに失敗した場合は、セションを終了します。

■マルチスレッド環境で動作する応用プログラムを作成する場合の注意事

応用プログラムを作成するには、複数スレッド間の排他などを考慮して、実行したSQL文によるデータベースの検索および更新結果が正しくなるようにしなければなりません。以下に注意点を示します。


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

All Rights Reserved, Copyright (C) 富士通株式会社 2003-2004