如何检查当前 SQL 会话是否有未提交的更改?

max*_*zig 3 oracle oracle-sql-developer session

假设您在 SQL Developer 中并想检查当前用户会话(即您的连接)是否有未提交的更改。

如果您退出 SQL Developer,它会进行这样的检查并显示一个对话框如何继续。我想在不退出的情况下检查它 - 例如通过执行特殊的 SQL 语句或 SQL Developer 操作。

理想情况下,如果可以配置 SQL Developer,以便在当前会话是“脏的”(即有未提交的更改)时直观地指示它,那就太好了——例如,通过在工作表周围显示红色边距。

Bal*_*app 5

你可以查一下V$TRANSACTION。下面是一个例子:

create table t(a number);

Table created.

insert into t values (1);

1 row created.

select t.status
from v$transaction t
join v$session s
on t.ses_addr = s.saddr
where s.sid = sys_context('USERENV', 'SID');

STATUS
----------------
ACTIVE
Run Code Online (Sandbox Code Playgroud)

提交后:

commit;

Commit complete.

select t.status
from v$transaction t
join v$session s
on t.ses_addr = s.saddr
where s.sid = sys_context('USERENV', 'SID');

no rows selected
Run Code Online (Sandbox Code Playgroud)

对于这一点,你必须授予SELECT对特权SYS.V_$TRANSACTIONSYS.V_$SESSION虽然。


miv*_*ivk 5

还有

SELECT dbms_transaction.local_transaction_id FROM dual;
Run Code Online (Sandbox Code Playgroud)

如果有挂起的提交,它将显示一个事务 ID。