プライマリ・コンテンツに移動
Oracle® Database Oracleプリコンパイラのためのプログラマーズ・ガイド
12c リリース1 (12.1)
B71398-03
目次へ移動
目次
索引へ移動
索引

前
次

SET TRANSACTION文の使用について

SET TRANSACTION文を使用すると、読取り専用または読取り/書込みトランザクションを開始したり、現行のトランザクションを指定したロールバック・セグメントに割り当てたりできます。読取り専用トランザクションは、COMMIT文、ROLLBACK文またはデータ定義文で終了します。

読取り専用トランザクションでは反復可能読取りが行えるため、他のユーザーが更新中の1つ以上の表に対して、複数の問合せを実行する場合に便利です。読取り専用トランザクション中、複数の表と複数の問合せで構成された読取り一貫性ビューが作成され、すべての問合せがデータベースの同じスナップショットを参照します。他のユーザーは、通常の方法でデータの問合せや更新ができます。次にSET TRANSACTION文の例を示します。

EXEC SQL SET TRANSACTION READ ONLY;

SET TRANSACTION文は、読取り専用トランザクションの最初のSQL文であることが必要で、1つのトランザクションで1回しか使用できません。READ ONLYパラメータは必須です。これを使用しても、他のトランザクションには影響がありません。読取り専用トランザクションで使用できるのは、SELECT文(FOR UPDATEなし)、LOCK TABLE文、 SET ROLE文、ALTER SESSION文、ALTER SYSTEM文、COMMIT文およびROLLBACK文のみです。

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

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