Ily*_*hev 5 oracle transactions
我正在尝试调试下一个oracle过程:
create or replace PROCEDURE CASE_6_TRANS_2
AS
V_NUM NUMBER(38,0);
BEGIN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT COUNT(AE.ID) INTO V_NUM FROM AUDIT_EVENT AE WHERE ID=10;
COMMIT; --BREAKPOINT
END CASE_6_TRANS_2;
Run Code Online (Sandbox Code Playgroud)
但是当我想在断点处看到当前事务时,V $ TRANSACTION表为空.
该文件说:
事务在遇到第一个可执行SQL语句时开始.可执行SQL语句是一种SQL语句,它生成对数据库实例的调用,包括DML和DDL语句以及SET TRANSACTION语句.
根据文档 SELECT查询是DML
事务以 SET TRANSACTION 开始,但 transaction_id 的分配被延迟到第一个 DML(真正的 DML - 根据我的经验不是 SELECT 语句)
当一个事务开始时,Oracle数据库将该事务分配给一个可用的undo数据段,以记录新事务的undo条目。在分配撤消段和事务表槽(这发生在第一个 DML 语句期间)之前,不会分配事务 ID。
这对我来说很有意义,没有理由提交或回滚 SELECT。