oracle – 触发器和束缚违规中的autonomous_transaction
发布时间:2021-01-13 04:11:28 所属栏目:站长百科 来源:网络整理
导读:我碰着了一个实行行使autonomous_transaction的风趣环境.请思量以下环境(请留意,这不是以这种方法编写的:只是观念证明): create table t(id int primary key,changed date)/create or replace trigger t_trigbefore insert or updateon tfor each rowdecla
我碰着了一个实行行使autonomous_transaction的风趣环境.请思量以下环境(请留意,这不是以这种方法编写的:只是观念证明): create table t ( id int primary key,changed date ) / create or replace trigger t_trig before insert or update on t for each row declare PRAGMA AUTONOMOUS_TRANSACTION; begin :new.changed := sysdate; commit; end; / insert into t(id,changed) values (1,sysdate); insert into t(id,changed) values (2,sysdate); 制止当前时刻的更他日期: SQL> select * from t; ID CHANGED --------- ----------------- 1 19.09.11 15:29:44 2 19.09.11 15:32:35 让我们苏息5秒,然后执行以下操纵: update t set id = 2 where id = 1; 显然它会因束缚违规而失败,但它也不会变动已变动的属性: SQL> select * from t; ID CHANGED --------- ----------------- 1 19.09.11 15:29:44 2 19.09.11 15:32:35 我的题目是:为什么会产生这种环境?我确信我误解了一些根基观念,但我无法领略. 在此先感激您的辅佐. 办理要领PRAGMA AUTONOMOUS TRANSACTION生涯上下文,打开另一个会话并建造一些对象.提交是必需的,不然变动将丢失.您可以领略,只有在数据库中某些块中所做的变动才故意义(自治).以是,在你的触发器中你什么都不做.该变量:new.changed在另一个会话中被“变动”,假如我们可以在这种模式下说出来的话.您的更新不会变动. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |