【发布时间】:2009-02-03 09:16:17
【问题描述】:
有没有办法判断我在事务中是否有未提交的工作(即 DML)?也许我可以查询一个数据字典视图?
欢迎在运行开放事务的会话内部和外部找到这一点的方法。
谢谢
【问题讨论】:
标签: sql oracle transactions
有没有办法判断我在事务中是否有未提交的工作(即 DML)?也许我可以查询一个数据字典视图?
欢迎在运行开放事务的会话内部和外部找到这一点的方法。
谢谢
【问题讨论】:
标签: sql oracle transactions
如果您无权访问 v$session,您可以使用
select dbms_transaction.local_transaction_id from dual;
这仅适用于会话内,但不需要 v$ 权限。 如果它返回一个非空值,你已经开始了一个事务。这通常意味着未提交的更改,但也有例外。如果您发布了一个保存点、更改了数据并回滚到该保存点,那么事务仍然“有效”。此外,使用数据库链接启动事务,即使只是为了选择(或者他们曾经这样做过)。
【讨论】:
SELECT *
FROM v$session v
WHERE v.AUDSID = userenv('sessionid')
AND v.TADDR IS NOT NULL
【讨论】: