Oracle/PL_SQL2009. 11. 28. 00:20
부모와 자식의 관계인 t1과 t2테이블이 있다.
t1테이블에 데이터가 update되면 관련된 t2테이블의 데이터도 같이 변경되는
간단한 트리거를 만들어보자.

처음에는 테이블 생성시 on delete cascade 옵션과 같이
on update cascade가 있는 줄 알았는데 그런건 없고, 따로 트리거를 만들어야 한다.

아래와 같이 t1과 t2 테이블 2개를 생성한다. t1과 t2는 부모와 자식관계이다.

create table t1
(col1 number,
 primary key(col1));

create table t2
(col1 number,
 col2 varchar2(10),
 foreign key(col1) references t1(col1));


t1과 t2에 데이터를 넣는다.

insert into t1 values(1);
insert into t1 values(2);
insert into t1 values(3);

insert into t2 values(1, 'a');
insert into t2 values(2, 'b');
insert into t2 values(3, 'c');


트리거를 생성한다.
 (물론 유저는 create trigger 권한이 있어야한다.)

create or replace trigger tri1
after update on t1
for each row
begin
  update t2
  set col1=:new.col1
  where col1=:old.col1;
end;
/


 t1테이블에 데이터를 입력해본다.

update t1
set col1=9
where col1=1;

데이터가 잘 변경되었음을 확인한다.

select * from t1;
select * from t2;



cf. 테이블 생성시 on delete cascade 옵션에 따른 간단한 테스트


create table t1
(col1 number,
 primary key(col1));

create table t2
(col1 number,
 col2 varchar2(10),
 foreign key(col1) references t1(col1) on delete cascade);

insert into t1 values(1);
insert into t1 values(2);
insert into t1 values(3);

insert into t2 values(1, 'a');
insert into t2 values(2, 'b');
insert into t2 values(3, 'c');

delete from t1 where col1=1;

select * from t1;
select * from t2;

'Oracle > PL_SQL' 카테고리의 다른 글

instead of trigger  (0) 2009.11.18
print_table프로시져 만들기  (0) 2009.11.18
trigger  (0) 2009.11.17
package의 overloading  (0) 2009.11.17
테이블 변경시 관련 procedure, function, package 확인  (0) 2009.11.16
Posted by 자수성가한 부자