Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I tell if I have uncommitted work in an Oracle transaction?

Is there a way to tell if I have uncommitted work (ie DML) in a transaction? Maybe a data-dictionary view I can query?

A method to find this out both from within and outside of the session running the open transaction would be welcome.

Thank you

like image 721
cagcowboy Avatar asked Feb 03 '09 09:02

cagcowboy


2 Answers

If you don't have access to v$session you can use

select dbms_transaction.local_transaction_id from dual;

This only works from within the session but doesn't need v$ privileges. If it returns a non-null, you have started a transaction. That normally means uncommitted changes, but there are exceptions. If you issued a savepoint, changed data and rolled back to the savepoint, the transaction still 'lives'. Also, using database links starts transactions, even just for selects (or they used to).

like image 89
Gary Myers Avatar answered Sep 20 '22 03:09

Gary Myers


SELECT  *
FROM    v$session v
WHERE   v.AUDSID = userenv('sessionid')
    AND v.TADDR IS NOT NULL
like image 41
Quassnoi Avatar answered Sep 21 '22 03:09

Quassnoi