我正在尋找某種方法來從 Oracle 中的 T-SQL 復制 @@trancount 的行為,我想不出一個聰明的方法來做到這一點。
任何幫助,將不勝感激:)
uj5u.com熱心網友回復:
這在 Oracle 中有點陌生,因為您通常在一個會話中只打開一個事務。有關 Oracle 中事務概念的更多資訊,請參閱檔案
但是您可以查詢v$transaction以查看當前會話中的未結交易。
select count(*) from v$transaction t
join v$session s on t.ses_addr = s.saddr
and s.AUDSID = Sys_Context('USERENV', 'SESSIONID');
uj5u.com熱心網友回復:
如果你真的想模擬@@trancount,你可以按照這個方法
回傳在當前連接上發生的 BEGIN TRANSACTION 陳述句的數量。在 TSQL 上
PRINT @@TRANCOUNT
-- The BEGIN TRAN statement will increment the
-- transaction count by 1.
BEGIN TRAN
PRINT @@TRANCOUNT
BEGIN TRAN
PRINT @@TRANCOUNT
-- The COMMIT statement will decrement the transaction count by 1.
COMMIT
PRINT @@TRANCOUNT
COMMIT
PRINT @@TRANCOUNT
--Results
--0
--1
--2
--1
--0
在 Oracle 中沒有這樣的功能,但可以通過變數來模擬。
set serveroutput on
declare
vtrancount pls_integer := 0;
-- The BEGIN statement will increment the transaction count by 1.
begin
vtrancount := vtrancount 1;
dbms_output.put_line(vtrancount);
-- ... dml
begin
vtrancount := vtrancount 1;
dbms_output.put_line(vtrancount);
... dml
commit;
vtrancount := vtrancount - 1;
dbms_output.put_line(vtrancount);
end;
commit;
vtrancount := vtrancount - 1;
dbms_output.put_line(vtrancount);
exception when others then
vtrancount := 0;
rollback;
raise;
end;
/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/340655.html
標籤:sql 甲骨文 oracle-sqldeveloper
上一篇:ORA-01008:并非所有變數都系結-“并非所有變數都系結”
下一篇:起搏器集群中的監聽器oracle
