학원수업_Oracle

트리거

logloglog 2020. 11. 24. 20:20

plsql의 구조

(create or replace) function 함수이름(매개변수) //함수는 반환값이있다
(create or replace) procedure 프로시저명(매개변수)//프로시저는 반환값이 없다.
declare
선언부 (변수 , 상수, 커서)
begin
실행부 (select문을 이용한 sql문)

 

트리거

판매가 되는 순간에 카트테이블에 저장이 되고 저장이 되는 순간! 재고수불테이블에서 재고를 하나 -1하는거를 자동으로 되게 하는 것 (관리자가 별도로 실행시키는게 X)

한테이블에 트리거를 종료시키지않은 테이블에서 또 트리거 호출?? 프로그램 종료시켜버림

- 임의의 테이블에 대한 이벤트(INSERT, UPDATE, DELETE)가 발생되면 다른 테이블을 대상으로 별도의 SQL문이 수행되게 하는 프로시져의 일종

발생되기 직전, 발생된 후 다 가능

타이밍이라는게 있는데, 두가지 after, before 

*사용 형식

CREATE TRIGGER 트리거명
triming BEFORE|AFTER event INSERT|UPDATE|DELETE
ON 테이블명
[FOR EACH ROW]
[WHEN 조건]
BEGIN 
이벤트 발생 전|후에 수행할 SQL문;
END;

1) 트리거 유형

- 문장단위 트리거 : 한 테이블에 대해 DML명령 (INSERT, UPDATE, DELETE)문이 실행될 때 한번만 실행

- 행단위 트리거 : FOR EACH ROW가 기술된 경우이며 DML명령문에 의해 여러번 트리거 수행되는 경우

(대부분 행단위 트리거 사용됨, :NEW, :OLD, 등 의사레코드 사용)

2) WHEN조건

- 행단위 트리거에서만 사용가능하며, 이벤트 발생시 구체적인 검색조건을 명시할 수 있음

 

트리거가 커서랑 같이 사용되는 경우가 ㅈ종종걸

EX) 분류테이블에 새로운 자료 하나를 입력하시오.

입력이완교왼 ;,'정상적으로 분류코드의 입력이 수행되었음';이라는 메셎를 출력하는트리거 장성

[자료]
LPROD_ID = 13
LPROD_GU = P601
LPROD_NM  = '소스류'

 

CREATE TRIGGER TG_LPROD01
AFTER INSERT ON LPROD
BEGIN
    DBMS_OUTPUT.PUT_LINE('정상적으로 분류코드 입력이 수행되었음');
END;


반드시 SELECT문이 나와야함 아니면 TRIGGER출력이 안됨

SELECT * FROM LPRODL
INSERT INTO LPROD VALUES(13,'P601','소스류');

 

EX) 오늘이 2005년 8월 2일이고 다음 자료를 CART테이블에 저장한 후

재고수불테이블에서 해당 제품의 재고를 조정하시오

회원번호 : i001

CART_NO : '2005080200001'

CART_PROD : P101000001

CART_QTY : 12

 

1. 트리거 생성

변수가 필요할때는 DCLARE를 쓴다.

 

*자동화 시키려면 CURSUR만들어야함

EX) 2005년 7월 28일 B001회원의 판매정보를 반품처리(모두 삭제)하고 재고 수불 테이블을 변경하시오.

1) 반복처리 위해서 DELETE를 해준다. (반품처리) -->CURSUR쓰면 간단하게 가능

 

 

 

 

'학원수업_Oracle' 카테고리의 다른 글

201111 데이터모델링  (0) 2020.11.11
USER DEFINED FUNCTION(FUNCTION)  (0) 2020.11.09
프로시저  (0) 2020.11.09
201105 프로시저  (0) 2020.11.05
201105  (0) 2020.11.05