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

B.2 マルチスレッド環境で動作するアプリケーションの例

マルチスレッド環境で動作するアプリケーションの例を以下に示します。

以下の例におけるスレッドは、すでに他のアプリケーションで起動されているものとします。

000010 @OPTIONS ALPHAL(WORD)
000020 IDENTIFICATION DIVISION.
000030 PROGRAM-ID.   sub_threadB.
000040 ENVIRONMENT DIVISION.
000050 DATA DIVISION.
000060 WORKING-STORAGE SECTION.
000070     EXEC SQL BEGIN DECLARE SECTION END-EXEC.
000080 01 SQLSTATE PIC X(5).                                          …… (1)
000090 01 SQLMSG   PIC X(255).
000100     EXEC SQL END   DECLARE SECTION END-EXEC.
000110 01 ret    PIC S9(4) BINARY.
000120 LINKAGE SECTION.
000130 01 ses_id PIC S9(9) COMP-5.
000140 PROCEDURE DIVISION USING ses_id.
000150
000160     INITIALIZE SQLSTATE.
000170     INITIALIZE SQLMSG.
000180
000190     CALL "SQLThrStartID" USING BY VALUE ses_id RETURNING ret.  …… (2)
000200     IF ret NOT = 0 THEN
000210         DISPLAY "SQLThrStartIDエラー"
000220         EXIT PROGRAM
000230     END-IF.
000240
000250     EXEC SQL WHENEVER SQLERROR GO TO :CONNECT_ERROR END-EXEC.
000260     EXEC SQL
000270            CONNECT TO 'SI_DB333'                               …… (3)
000280     END-EXEC.
000290     DISPLAY "CONNECT(SQLSTATE) = " SQLSTATE.
000300     DISPLAY "CONNECT(SQLMSG) = " SQLMSG.
000310
000320     EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.
000330
000340     EXEC SQL
000350             INSERT INTO SI_SCHM1.SI_TABLE2                     …… (4)
000360                    VALUES(1,1,1,1,1,1,1,1,1,1,'R','DD','BBBB')
000370     END-EXEC.
000380     DISPLAY "INSERT(SQLSTATE) = " SQLSTATE.
000390     DISPLAY "INSERT(SQLMSG) = " SQLMSG.
000400
000410     EXEC SQL
000420            COMMIT WORK                                         …… (5)
000430     END-EXEC.
000440     DISPLAY "COMMIT(SQLSTATE) = " SQLSTATE.
000450     DISPLAY "COMMIT(SQLMSG) = " SQLMSG.
000460
000470     EXEC SQL
000480            DISCONNECT ALL                                      …… (6)
000490     END-EXEC.
000500     DISPLAY "DISCONNECT(SQLSTATE) = " SQLSTATE.
000510     DISPLAY "DISCONNECT(SQLMSG) = " SQLMSG.
000520
000530     CALL "SQLThrEndID" USING BY VALUE ses_id RETURNING ret.    …… (7)
000540     IF ret = 0 THEN
000550         DISPLAY "SQLThrEndIDエラー"
000560         EXIT PROGRAM
000570     END-IF.
000580
000590     EXIT PROGRAM.
000600
000610 CONNECT_ERROR.                                                 …… (8)
000620     DISPLAY "CONNECT(SQLSTATE) = " SQLSTATE.
000630     DISPLAY "CONNECT(SQLMSG) = " SQLMSG.
000640     CALL "SQLThrEndID" USING BY VALUE ses_id RETURNING ret.
000650     EXIT PROGRAM.

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

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

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

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

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

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

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

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

マルチスレッド環境で動作するアプリケーションを作成する場合の注意事項

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