부모와 자식의 관계인 t1과 t2테이블이 있다.
t1테이블에 데이터가 update되면 관련된 t2테이블의 데이터도 같이 변경되는
간단한 트리거를 만들어보자.
처음에는 테이블 생성시 on delete cascade 옵션과 같이
on update cascade가 있는 줄 알았는데 그런건 없고, 따로 트리거를 만들어야 한다.
아래와 같이 t1과 t2 테이블 2개를 생성한다. t1과 t2는 부모와 자식관계이다.
t1과 t2에 데이터를 넣는다.
트리거를 생성한다.
(물론 유저는 create trigger 권한이 있어야한다.)
t1테이블에 데이터를 입력해본다.
데이터가 잘 변경되었음을 확인한다.
cf. 테이블 생성시 on delete cascade 옵션에 따른 간단한 테스트
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));
(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');
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;
/
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;
set col1=9
where col1=1;
데이터가 잘 변경되었음을 확인한다.
select * from t1;
select * from t2;
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;
(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 |