출처: https://forums.oracle.com/forums/thread.jspa?threadID=466812
1) PL/SQL table을 생성한다.
SQL) create or replace PACKAGE emp_pkg as
TYPE emp_tab_type is table of EMP.DEPTNO%TYPE
index by binary_integer;
emp_old emp_tab_type;
emp_new emp_tab_type;
emp_index binary_integer;
end emp_pkg;
/
Package created.
2) BEFORE STATEMENT trigger를 생성한다.
SQL)create or replace TRIGGER emp_bef_stm_all
before insert or update or delete on emp
begin
emp_pkg.emp_index :=0;
end;
/
SQL)
Trigger created.
3) AFTER ROW trigger를 생성한다.
SQL>create or replace TRIGGER emp_aft_row_all
after insert or update or delete on emp
for each row
begin
emp_pkg.emp_index := emp_pkg.emp_index + 1;
emp_pkg.emp_old(emp_pkg.emp_index) := :old.deptno;
emp_pkg.emp_new(emp_pkg.emp_index) := :new.deptno;
end;
/
SQL>Trigger created.
4) AFTER STATEMENT trigger를 생성한다.
SQL>create or replace TRIGGER emp_aft_stm_all
after insert or update or delete on emp
declare
v_sal emp.sal%type;
begin
for i in 1 .. emp_pkg.emp_index loop
select avg(sal) into v_sal from emp
where deptno=emp_pkg.emp_old(i);
update dept
set sal = v_sal
where deptno=emp_pkg.emp_old(i);
dbms_output.put_line('DEPTNO(old)=>'||to_char(emp_pkg.emp_old(i)));
if emp_pkg.emp_new(i) != emp_pkg.emp_old(i) then
select avg(sal) into v_sal from emp
where deptno=emp_pkg.emp_new(i);
update dept
set sal = v_sal
where deptno=emp_pkg.emp_new(i);
dbms_output.put_line('DEPTNO(new)=>'||to_char(emp_pkg.emp_new(i)));
end if;
end loop;
emp_pkg.emp_index :=0;
end;
/
'Programming > Oracle' 카테고리의 다른 글
오라클 인덱스 명 바꾸기 (0) | 2011.12.09 |
---|---|
Alter Oracle Column (0) | 2011.11.28 |
PL/SQL User's Guide and Reference (0) | 2011.11.25 |
오라클 누적합 구하기 (0) | 2011.11.25 |
일정 영역의 숫자를 row로 생성하는 오라클(Oracle) 쿼리 (0) | 2011.11.24 |
댓글