プライマリ・コンテンツに移動
Pro*C/C++プログラマーズ・ガイド
12c リリース1(12.1)
B71397-03
目次へ移動
目次
索引へ移動
索引

前
次

SET TRANSACTION文

SET TRANSACTION文を使用すると、読取り専用トランザクションを開始できます。読取り専用トランザクションでは反復可能読取りが行えるため、他のユーザーが更新中の1つ以上の表に対して、複数の問合せを実行する場合に便利です。次にSET TRANSACTION文の例を示します。

EXEC SQL SET TRANSACTION READ ONLY;
 

SET TRANSACTION文は、読取り専用トランザクションの最初のSQL文である必要があり、1つのトランザクションで1回しか使用できません。READ ONLYパラメータは必須です。これを使用しても、他のトランザクションには影響がありません。

読取り専用トランザクションに使用できるのは、SELECT文、COMMIT文およびROLLBACK文のみです。たとえば、INSERT文、DELETE文またはSELECT FOR UPDATE OF文を使用するとエラーが発生します。

読取り専用トランザクション中、複数の表と複数の問合せで構成された読取り一貫性ビューが作成され、すべての問合せがデータベースの同じスナップショットを参照します。他のユーザーは、通常の方法でデータの問合せや更新ができます。

読取り専用トランザクションは、COMMIT文またはROLLBACK文、データ定義文によって終了します。(データ定義文では暗黙的COMMITが発行されることを思い出してください。)

次の例では、店の管理者が読取り専用トランザクションを使用して、当日、先週および先月の売上を調べ、要約レポートを生成しています。このレポートは、このトランザクションの実行中にデータベースを更新する他のユーザーによる影響を受けません。

EXEC SQL SET TRANSACTION READ ONLY; 
EXEC SQL SELECT sum(saleamt) INTO :daily FROM sales 
    WHERE saledate = SYSDATE; 
EXEC SQL SELECT sum(saleamt) INTO :weekly FROM sales 
    WHERE saledate > SYSDATE - 7; 
EXEC SQL SELECT sum(saleamt) INTO :monthly FROM sales 
    WHERE saledate > SYSDATE - 30; 
EXEC SQL COMMIT WORK; 
    /* simply ends the transaction since there are no changes 
       to make permanent */ 
/* format and print report */