CREATE TRIGGER trigger_name
timing[BEFORE|AFTER] event[INSERT|UPDATE|DELETE]
ON table_name
[FOR EACH ROW]
[WHEN conditions]
BEGIN
statement
END
------ Trigger : 자동실행되는 procedure 이다.
create table emp08
as
select employee_id,first_name , job_id
from employees
where 1=0;
desc emp08;
select * from emp08;
create or replace trigger trigger_01
after insert on emp08
begin
dbms_output.put_line('-------------------------신입사원이 들어옴');
end;
/
create table emp08_backup(
empid number ,
salary number ,
hire_date date
)
create or replace trigger trigger_02
after insert on emp08
for each row
begin
insert into emp08_backup values(:new.employee_id,100,sysdate);
end;
/
insert into emp08 values (2,'신한2','IT');
insert into emp08 values (3,'신한4','IT');
delete from emp08 where employee_id=2;
select * from emp08_backup;
select * from emp08;
create or replace trigger trigger_03
before delete on emp08
for each row
begin
delete from emp08_backup where empid = :old.employee_id;
end;
/
CREATE TABLE 상품(
상품코드 CHAR(6) PRIMARY KEY,
상품명 VARCHAR2(12) NOT NULL,
제조사 VARCHAR(12),
소비자가격 NUMBER(8),
재고수량 NUMBER DEFAULT 0
);
CREATE TABLE 입고(
입고번호 NUMBER(6) PRIMARY KEY,
상품코드 CHAR(6) REFERENCES 상품(상품코드),
입고일자 DATE DEFAULT SYSDATE,
입고수량 NUMBER(6),
입고단가 NUMBER(8),
입고금액 NUMBER(8)
);
INSERT INTO 상품(상품코드, 상품명, 제조사, 소비자가격)
VALUES('A00001','세탁기', 'LG', 500);
INSERT INTO 상품(상품코드, 상품명, 제조사, 소비자가격)
VALUES('A00002','컴퓨터', 'LG', 700);
INSERT INTO 상품(상품코드, 상품명, 제조사, 소비자가격)
VALUES('A00003','냉장고', '삼성', 600);
commit;
-- 입고 트리거
CREATE OR REPLACE TRIGGER TRG_04
AFTER INSERT ON 입고
FOR EACH ROW
BEGIN
UPDATE 상품
SET 재고수량 = 재고수량 + :NEW.입고수량
WHERE 상품코드 = :NEW.상품코드;
END;
INSERT INTO 입고(입고번호, 상품코드, 입고수량, 입고단가, 입고금액)
VALUES(1, 'A00001', 5, 320, 1600);
INSERT INTO 입고(입고번호, 상품코드, 입고수량, 입고단가, 입고금액)
VALUES(2, 'A00001', 20, 320, 1600);
SELECT * FROM 입고;
SELECT * FROM 상품;
UPDATE EMPLOYEES SET JOB_ID = 'MK_MAN'
WHERE EMPLOYEE_ID =206;