可以使用SET TRANSACTION语句来开始一个只读或读写事务、设置隔离级别、设置当前的事务到特定的回滚段。只读事务对于当其它用户更新相同的表时运行多个查询特别有用。
|
--(OE)只读事物 DECLARE daily_order_total NUMBER(12,2); weekly_order_total NUMBER(12,2); monthly_order_total NUMBER(12,2); BEGIN COMMIT; -- 结束以前的事务 SET TRANSACTION READ ONLY NAME '计算订单总和';
SELECT SUM (order_total) INTO daily_order_total FROM orders WHERE order_date = SYSDATE;
SELECT SUM (order_total) INTO weekly_order_total FROM orders WHERE order_date = SYSDATE - 7;
SELECT SUM (order_total) INTO monthly_order_total FROM orders WHERE order_date = SYSDATE - 30; dbms_output.put_line('Daily: ' || daily_order_total || 'Weekly: ' || weekly_order_total || 'Month: ' || monthly_order_total);
COMMIT; -- 结束只读事务
END;
|
SET TRANSACTION语句必须是只读事物的第1条SQL语句,且在事务中只允许出现一次。
如果将事务设置为只读,则后续的查询只能看到事务开始之前提交的改变。只读并不影响其它的用户和事务。
只有SELECT、FETCH、CLOSE、LOCK TABLE、COMMIT、和ROLLBACK语句允许出现在只读事务中,而且查询不能FOR UPDATE。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1122928/ ,如需转载,请注明出处,否则将追究法律责任。