如何使用Oracle自治事务autonomous_transaction
示例
1. 在流程中的使用:
非自治事务如下
创建或替换proceduresfis1.nonautonomous_insert_goal
p>as
开始
插入t值('NONAUTONOMOUSINSERT','1','1');
提交; p>
end;
自治事务如下
创建或替换过程fis1.autonomous_insert_goal
as pragmaautonomous_transaction;
开始
插入t值('AUTONOMOUSINSERT','1','1');
提交;
结束;
< p>执行时如下(插入两行):begin
insert into tvalues('AUTONOMOUSINSERT','1' ,'1');
NONAUTONOMOUS_INSERT_GOAL;
rollback;
end;
执行以下命令时(只插入一行)
p>begin
insert into tvalues('AUTONOMOUSINSERT','1','1');
AUTONOMOUS_INSERT_GOAL;
回滚; end;
2.触发器中的用法:
触发器只提交应该触发的信息,触发器以外的其他信息不会被提交已提交
创建表emp
as
select * from scott.emp;
创建表audit_tab
( username varchar2(30) default user,
timestamp date default sysdate,
msg varchar2(4000))
只有他的老板可以更新他的信息
创建或替换triggersfis1.emp_audit
在更新每行的sfis1.emp之前
声明
pragmaautonomous_transaction;
声明
pragmaautonomous_transaction;
p>
l_cnt 数字;
开始
从 Dual 中选择 count(*) 到 l_cnt
其中存在(从 emp 中选择 null,其中 empno= :new.empno
从 mgr = 开始( selectempno from emp where ename = user )
通过先前的 empno = mgr 连接);
if ( l_cnt = 0 )
然后
插入audit_tab( msg )values('尝试更新'|| :new.empno );
commit;< /p>
raise_application_error(-20001,'AccessDenied');
end if;
end;
3 .
strong>select查询语句的审计方法创建表sfis1.audit_trail
(usernamevarchar2(30 byte), pknumber ,attributevarchar2(30 byte) ,
Dataumvarchar2(255 byte),时间戳日期)
用于查询和记录的视图,在查询包含sal、comm、hiredate的记录时插入审计表
创建或替换强制视图 sfis1.emp_v
(empno、ename、job、mgr、sal、comm、hiredate、deptno)
as
选择empno、ename、job、mgr,
audit_trail_pkg.record(empno,'sal',sal)sal,
audit_trail_pkg.record(empno,'comm' ,通讯)通讯,
p>audit_trail_pkg.record (empno, 'hiredate',hiredate)hiredate,
deptnofrom emp;
创建或替换包SFIS1.audit_trail_pkg
as
函数record(p_pk in number,p_attr invarchar2,p_dataum in number)返回number;
函数record(p_pk in number,p_attr in varchar2,p_dataum in varchar2) return varchar2;
function record(p_pk in number,p_attr in varchar2,p_dataum in date ) return date;
end;
创建或替换包体 sfis1.audit_trail_pkg< /p>
as
过程日志(p_pk为数字,p_attr为varchar2,p_dataum为varchar2)
as
pragmaautonomous_transaction;
开始
插入audit_trail值(user, p_pk, p_attr, p_dataum, sysdate);
提交;
结束;
< p >函数记录(p_pk in number,p_attr in varchar2,p_dataum in number)返回数字是
开始
log( p_pk, p_attr, p_dataum ) ;
returnp_dataum;
end;
函数记录(p_pk in number,p_attrin varchar2,p_dataum in varchar2 ) return varchar2
is
begin
log( p_pk, p_attr, p_dataum );
returnp_dataum;
end;
函数记录(p_pk为数字,p_attr为varchar2,p_dataum为日期)返回日期
is
begin< /p>
log( p_pk, p_attr,to_char(p_dataum,'dd.mon.yyyyhh34:mi:ss') );
returnp_dataum;
end;
p>end;
结束自治事务:
为了结束自治事务,必须发出完成的COMMIT或ROLLBACK,或者必须执行DDL (隐含提交)。自治事务在进行 SETTRANSACTION 或 SAVEPOINT 时将自动启动。
以上就是《如何使用Oracle自治事务autonomous_transaction》文章的全部内容,感谢您的阅读!相信大家都有一定的了解,希望分享的内容对大家有所帮助。如果您想了解更多知识,请关注n 进入行业资讯频道!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何使用Oracle自治事务autonomous_transaction