oracle 트리거와 사물

2424 단어 oracle
트리거에 대한 상세한 설명은 아래의 이 큰 소의 블로그를 보십시오
www.cnblogs.com/huyong/archive/2011/04/27/2030466.html
트리거를 작성할 때는 다음 사항에 유의해야 합니다.
l 트리거는 파라미터를 받아들이지 않습니다.
l 한 테이블에 최대 12개의 트리거가 있을 수 있지만 같은 시간, 같은 사건, 같은 유형의 트리거는 하나만 있을 수 있다.각 촉발기 간에 모순이 있어서는 안 된다.
l 한 테이블에 있는 트리거가 많을수록 이 테이블에 있는 DML 작업의 성능에 큰 영향을 미친다.
l 트리거는 최대 32KB입니다.필요한 경우 프로세스를 설정한 다음 트리거에서 CALL 문을 사용하여 호출할 수 있습니다.
l 트리거의 실행 부분에는 DML 문구(SELECT, INSERT, UPDATE, DELETE)만 사용할 수 있고 DDL 문구(CREATE, ALTER, DROP)는 사용할 수 없다.
l 트리거에는 사무제어문구(COMMIT, ROLLBACK, SAVEPOINT)가 포함될 수 없습니다.트리거는 트리거 문장의 일부이기 때문에 트리거 문장이 제출되고 반환될 때 트리거도 제출되고 반환된다.
l 트리거 주체에서 호출되는 모든 과정, 함수는 사무 제어 문장을 사용할 수 없습니다.
l 트리거 바디에는 Long 및 blob 변수가 표시되지 않습니다.새 값 new와 구 값old도 테이블의 어떤 롱과blob열에도 표시할 수 없습니다.
l 다양한 유형의 트리거(예: DML 트리거, INSTEAD OF 트리거, 시스템 트리거)
의 문법 격식과 작용은 비교적 큰 차이가 있다.
"트리거 주체에서 호출되는 모든 과정, 함수에 대해 사무 제어 문장을 사용할 수 없습니다."이것은 만약 호출하는 과정에서 자치사물이라고 성명한다면 호출할 수 있다는 것을 구분할 수 있다.
트리거 하나와 과정 두 개를 만드는 세 장의 표
create table t_test(id int,tname varchar2(20));
create table t_test1(id int,tname varchar2(20));
create table t_test2(id int,tname varchar2(20));

create or replace trigger tr_t_test
 after  insert
  on t_test
  FOR EACH ROW
  DECLARE
  i int;
begin
  i :=1;
  pro_t_test1(:NEW.id,:NEW.tname);

  -- pro_t_test2(:old.id,:old.tname);
  --rollback;
end;
/

create or replace procedure pro_t_test1(vid int, vname varchar2)
is
Pragma Autonomous_transaction;
begin
  insert into t_test1 values(vid,vname);
  commit;
end;
/
create or replace procedure pro_t_test2(vid int, vname varchar2)
is
begin
   insert into t_test2 values(vid,vname);
   commit;
end;
/

첫 번째 트리거 중 "
이 두 줄은 주석이 없는 것이다.
이 트리거는 성공적으로 만들 수 있지만, insert 작업을 할 때ora-04092를 잘못 보고합니다.
  -- pro_t_test2(:old.id,:old.tname);
  --rollback;

이 두 insert는 실패했지만 t 까지 썼다테스트 1 표에 있습니다. 프로t_테스트 1에는commit이 있는데 이를 통해'자주적인 사물'이 완전히 독립된 것을 알 수 있다.
당신의 주 업무에서 다른 업무에서 호출할 수 있는 독립된 사물을 선택할 수 있습니다.자치 사무는 주요 사무에 영향을 주지 않고 수정을 제출하거나 굴러갈 수 있다.
이 두 줄을 주석한 후에 삽입하면 성공한다.
  SQL> insert into t_test values(1,'a');   1 row inserted   SQL> commit;   Commit complete   SQL> select count(*) from t_test;     COUNT(*) ----------          1   SQL> select count(*) from t_test1;     COUNT(*) ----------          3   SQL> select count(*) from t_test2;     COUNT(*) ----------          0   SQL>

좋은 웹페이지 즐겨찾기