Oracle自治事務autonomous_transaction用法
自治事務執行某些工作(COMMIT,ROLLBACK)後不影響當前的外面執行的事務。
範例
1. 過程中的使用:
非自治事務如下
create or replace procedure sfis1.nonautonomous_insert_goal
as
begin
insert into t values('NONAUTONOMOUS INSERT','1','1');
commit;
end;
自治事務如下
create or replace procedure sfis1.autonomous_insert_goal
as pragma autonomous_transaction;
begin
insert into t values('AUTONOMOUS INSERT','1','1');
commit;
end;
當執行如下(插入兩行):
begin
insert into t values ('AUTONOMOUS INSERT','1','1');
NONAUTONOMOUS_INSERT_GOAL;
rollback;
end;
當執行下面(只插入一行)
begin
insert into t values ('AUTONOMOUS INSERT','1','1');
AUTONOMOUS_INSERT_GOAL;
rollback; end;
2.trigger 中的使用:
觸發器只commit該觸發的資訊,觸發器之外的不會commit
create table emp
as
select * from scott.emp;
create table audit_tab
( username varchar2(30) default user,
timestamp date default sysdate,
msg varchar2(4000))
只有他的老闆才能更新他的資訊
create or replace trigger sfis1.emp_audit
before update on sfis1.emp for each row
declare
pragma autonomous_transaction;
l_cnt number;
begin
select count(*) into l_cnt from dual
where exists ( select null from emp where empno = :new.empno
start with mgr = ( select empno from emp where ename = user )
connect by prior empno = mgr );
if ( l_cnt = 0 )
then
insert into audit_tab ( msg )values ('Attempt to update'|| :new.empno );
commit;
raise_application_error(-20001,'Access Denied');
end if;
end;
3.對對select查詢語句的審計方法
create table sfis1.audit_trail
(username varchar2(30 byte), pk number,attribute varchar2(30 byte),
Dataum varchar2(255 byte),timestamp date)
查詢及記錄用檢視,當查詢含sal, comm, hiredate記錄時插入審計表
create or replace force view sfis1.emp_v
(empno, ename, job, mgr, sal, comm, hiredate, deptno)
as
select empno, ename, job, mgr,
audit_trail_pkg.record (empno, 'sal', sal) sal,
audit_trail_pkg.record (empno, 'comm', comm) comm,
audit_trail_pkg.record (empno, 'hiredate', hiredate) hiredate,
deptno from emp;
CREATE OR REPLACE package SFIS1.audit_trail_pkg
as
function record( p_pk in number,p_attr in varchar2,p_dataum in number ) return number;
function 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;
create or replace package body sfis1.audit_trail_pkg
as
procedure log( p_pk in number,p_attr in varchar2,p_dataum in varchar2 )
as
pragma autonomous_transaction;
begin
insert into audit_trail values( user, p_pk, p_attr, p_dataum, sysdate );
commit;
end;
function record( p_pk in number,p_attr in varchar2,p_dataum in number ) return number
is
begin
log( p_pk, p_attr, p_dataum );
return p_dataum;
end;
function record( p_pk in number,p_attr in varchar2,p_dataum in varchar2 ) return varchar2
is
begin
log( p_pk, p_attr, p_dataum );
return p_dataum;
end;
function record( p_pk in number,p_attr in varchar2,p_dataum in date ) return date
is
begin
log( p_pk, p_attr,to_char(p_dataum,'dd.mon.yyyy hh24:mi:ss') );
return p_dataum;
end;
end;
結束自治事務:
為了結束自治事務,必須發出一個完成的COMMIT或ROLLBACK,或執行DDL(隱含COMMIT)。當自主事務做出SET
TRANSACTION或SAVEPOINT時,自主事務將自動開始。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25583515/viewspace-2147240/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 巢狀事務 VS 自治事務Oracle巢狀
- AUTONOMOUS TRANSACTION(自治事務)的介紹(轉)
- PostgreSQL DBA(68) - 使用DBLink實現自治事務SQL
- ORACLE SEQUENCE用法Oracle
- oracle comment on的用法Oracle
- oracle中substr() instr() 用法Oracle
- 【TUNE_ORACLE】Oracle Hint之概念與用法Oracle
- 【Oracle的NVL函式用法】Oracle函式
- oracle樹中prior的用法Oracle
- oracle中的CURRVAL和NEXTVAL用法Oracle
- Oracle批量插入資料insert all into用法Oracle
- 【SQL】Oracle查詢轉換之 OR用法SQLOracle
- Oracle中Nextval用法SEQUENCE與SYS_GUID()OracleGUI
- Oracle行列轉換及pivot子句的用法Oracle
- [轉載] Oracle:start with...connect by子句的用法Oracle
- Oracle臨時表的用法總結FLOracle
- oracle事務Oracle
- Oracle minus用法詳解及應用例項Oracle
- 非空校驗在oracle和mysql中的用法OracleMySql
- oracle中listagg()和wmsys.wm_concat()基本用法Oracle
- Oracle RAC自啟動Oracle
- ORACLE 11G 維護視窗和自動維護任務Oracle
- MySQL 主鍵自增 Auto Increment用法MySqlREM
- Oracle 自動化運維-Python連線OracleOracle運維Python
- Selenium用法 - - 自動化測試介紹
- oracle 中的事務Oracle
- Oracle定時任務Oracle
- Oracle 服務端程式Oracle服務端
- oracle正規表示式regexp_like的用法詳解Oracle
- oracle的會話如何自殺?Oracle會話
- oracle配置開機自啟動Oracle
- Oracle 11.1 自適應遊標Oracle
- Selenium用法詳解 -- Selenium3 自動化測試 frame多種用法舉例
- Oracle前財務經理起訴Oracle為哪般?Oracle
- oracle的只讀事務Oracle
- Oracle 自動化運維-Python監控Oracle告警日誌Oracle運維Python
- Selenium用法詳解 - - selenium自動化測試概要
- oracle自動冷備份指令碼Oracle指令碼
- oracle資料庫常用分析函式與聚合函式的用法Oracle資料庫函式