数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

小议Oracle11g的自治事务(四)


发布日期:2023年03月16日
 
小议Oracle11g的自治事务(四)
上一篇文章描述了自治事务实际上仍然是与主事务同处于一个会话中根据这个结论以及自治事务的特点可以确定主事务和自治事务拥有不同的事务上下文环境但是它们共享会话的上下文环境

由于自治事务的提交或回滚不会影响到调用自治事务的主事务因此主事务和自治事务必然是彼此独立的事务二者之间也不可能有任何事务级的上下文继承关系

但是由于主事务和自治事务同属于一个会话因此二者具有相同的会话上下文环境比如在包变量上二者就可以看到对方对变量进行的修改

SQL>CREATEORREPLACEPACKAGEPA_TESTAS

G_NUMNUMBER:=;

END;

/

程序包已创建

SQL>CREATEORREPLACEPROCEDUREP_AUTOAS

PRAGMAAUTONOMOUS_TRANSACTION;

BEGIN

INSERTINTOT_AUTO_TRANSVALUES(TEST);

PA_TESTG_NUM:=PA_TESTG_NUM+;

DBMS_OUTPUTPUT_LINE(PA_TESTG_NUM);

COMMIT;

END;

/

过程已创建

下面分别在主事务和自治事务中修改包中变量的值

SQL>SETSERVEROUTON

SQL>EXECPA_TESTG_NUM:=PA_TESTG_NUM+;

PL/SQL 过程已成功完成

SQL>EXECDBMS_OUTPUTPUT_LINE(PA_TESTG_NUM);

PL/SQL 过程已成功完成

SQL>EXECP_AUTO

PL/SQL 过程已成功完成

SQL>EXECP_AUTO

PL/SQL 过程已成功完成

SQL>EXECDBMS_OUTPUTPUT_LINE(PA_TESTG_NUM);

PL/SQL 过程已成功完成

SQL>EXECPA_TESTG_NUM:=PA_TESTG_NUM+;

PL/SQL 过程已成功完成

SQL>EXECDBMS_OUTPUTPUT_LINE(PA_TESTG_NUM);

PL/SQL 过程已成功完成

SQL>EXECP_AUTO

PL/SQL 过程已成功完成

SQL>CONNYANGTK/YANGTK@YTK已连接

SQL>SETSERVEROUTON

SQL>EXECDBMS_OUTPUTPUT_LINE(PA_TESTG_NUM);

PL/SQL 过程已成功完成

可以看到直到会话退出包中的变量才重新初始化在此之前自治事务和主事务可以同时看到彼此对变量的修改

上一篇:ADO.Net实现Oracle大批量数据的更新优化

下一篇:Oracle数据库LogMiner工具的使用方法