如何使用Oracle自治事务autonomous_transaction

分类:编程技术 时间:2024-02-20 15:58 浏览:0 评论:0
0
本文主要向您展示“如何使用Oracle自治事务autonomous_transaction”。内容简单、易懂、清晰。希望可以帮助您解答疑惑。让小编带领大家学习学习《如何使用Oracle自治事务autonomous_transaction》。使用这篇文章。

示例
1. 流程中的使用:

非自治事务如下

创建或替换proceduresfis1.nonautonomous_insert_goal

p>

as

开始

插入t值('NONAUTONOMOUSINSERT','1','1');

提交;

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 进入行业资讯频道!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何使用Oracle自治事务autonomous_transaction

用户评论