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

2.1 セション

ここでは、セションの作成および複数セションについて説明し、セション操作の例を示します。

セションの作成

アプリケーションプロセスには、1つまたは複数のセションを作成することができます。

セションを作成する方法には、以下の2つがあります。

Symfoware/RDBが自動的にセションを作成する

アプリケーションで最初のSQL文が実行されると、Symfoware/RDBが自動的にセションを作成します。

1つのアプリケーションプロセスで1つのセションを利用する場合は、最初のSQL文の実行がセションの開始であり、アプリケーションの終了がセションの終了となります。

利用者がセションを操作する関数を呼び出してセションを作成する

アプリケーション中でセションを操作する関数を呼び出すことにより、セションを作成することができます。複数のセションを作成する要件がある場合は、セションを操作する関数を利用します。

セションを操作する関数を利用する場合は、SQLThrStartID関数の実行がセションの開始であり、SQLThrEndID関数の実行がセションの終了となります。

複数セション

複数セションを作成には、以下の3つがあります。

マルチスレッド環境で、データベースアクセスを行う場合

スレッドごとにセションを割り当てることで、スレッド同士で影響を与えずにデータベースアクセスを実施できます。

マルチスレッド環境で動作するアプリケーションを開発する方法については、“2.5 マルチスレッド環境におけるデータ操作”を参照してください。

複数のコネクションで独立してトランザクション操作をしたい場合

1つのセションで複数のコネクションを利用する場合、1つのトランザクションで、複数のコネクションに対してデータベースを更新するSQL文は実行できません。複数のコネクションで、それぞれ更新を並行して実施する場合は、複数のセションを作成することで実現できます。

セション単位に、アプリケーションの動作を変更したい場合

ロール、省略時のスキーマ名、利用者、トランザクションモードなどの値は、セション単位に変更できます。1つのアプリケーションで、これらの変更可能な値が異なる環境を複数利用したい場合は、セションを複数作成し、それぞれの値を変更することで、実現できます。


複数セションを作成するには、セションを操作する関数を利用します。

セションを操作する関数には、以下の4つがあります。

参照

各関数の詳細については、“SQLリファレンス”を参照してください。

セションは、セションを操作する関数を使用して、以下の手順で作成します。

(1) SQLThrAllocID関数を発行して、セションを作成します。プロセス内でセションを識別するためのセションIDを受け取ります。

(2) SQLThrStartID関数を発行して、セションを開始します。これにより、セションと動作スレッドが関係付けられます。

(3) データベースを検索および更新するSQL文を実行します。

(4) SQLThrEndID関数を発行して、セションと動作スレッドの関係付けを終了します。

(5) SQLThrFreeID関数を発行して、セションを破棄します。

セション操作の例

以下に、シングルスレッドで複数セションを作成する場合の例を示します。

マルチスレッドの場合の使用方法は、“2.5 マルチスレッド環境におけるデータ操作”を参照してください。

SQLHDBS  ses_id1;
SQLHDBS  ses_id2;
              :
int   main( void ) {
EXEC SQL BEGIN DECLARE SECTION;
       char    SQLSTATE[6];
       char    SQLMSG[256];
EXEC SQL END DECLARE SECTION;

SQLThrAllocID( &ses_id1 );
SQLThrAllocID( &ses_id2 );
    sub01(ses_id1);
    sub02(ses_id2);
    sub03(ses_id1);
    sub03(ses_id2);
SQLThrFreeID ( ses_id1 );
SQLThrFreeID ( ses_id2 );
    return 0;
}
void sub01(SQLHDBS ses_id) {
SQLThrStartID( ses_id );
    EXEC SQL CONNECT TO 'SV1';
    EXEC SQL INSERT INTO SCH.TBL ・・・ ;
    EXEC SQL COMMIT WORK;
SQLThrEndID ( ses_id );
    return 0;
}        
void sub02(SQLHDBS ses_id) {
SQLThrStartID( ses_id );
    EXEC SQL CONNECT TO 'SV2';
    EXEC SQL INSERT INTO SCH.TBL ・・・ ;
    EXEC SQL COMMIT WORK;
SQLThrEndID ( ses_id );
    return 0;
}        
void sub03(SQLHDBS ses_id) {
SQLThrStartID( ses_id );
    EXEC SQL DISCONNECT ALL;
SQLThrEndID ( ses_id );
    return 0;
}