有没有办法判断我是否在交易中有未提交的工作(即DML)?也许我可以查询数据字典视图?
欢迎在运行开放交易的会话的内部和外部找到这一点的方法。
谢谢
答案 0 :(得分:23)
如果您无法访问v $ session,可以使用
select dbms_transaction.local_transaction_id from dual;
这仅适用于会话内但不需要v $权限。 如果它返回非null,则表明您已启动事务。这通常意味着未提交的更改,但也有例外。如果您发出了保存点,更改了数据并回滚到保存点,则事务仍然“存在”。此外,使用数据库链接可以启动事务,甚至仅用于选择(或曾经用于)。
答案 1 :(得分:15)
SELECT *
FROM v$session v
WHERE v.AUDSID = userenv('sessionid')
AND v.TADDR IS NOT NULL