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 |