<학습목표>
1. 프로시져
2. 함수
3. 트리거
4. 패키지
EX)


트리거
--만들어진 트리거 확인
SELECT TRIGGER_NAME FROM USER_TRIGGERS;
/
--MAX(LPROD_GU) : P403
--SUBSTR(MAX(LPROD_GU),2) : 403 + 1 => 404 => P404
INSERT INTO LPROD(LPROD_ID, LPROD_GU, LPROD_NM) VALUES(
(SELECT MAX(LPROD_ID) + 1 FROM LPROD),
(SELECT 'P' || (SUBSTR(MAX(LPROD_GU),2)+1) FROM LPROD),
'트리거추가값1');
/
SELECT * FROM LPROD;
/
CREATE TABLE LPROD_BAK
AS
SELECT FROM LPROD;
/
SELECT FROM LPROD_BAK;
/
CREATE OR REPLACE TRIGGER TG_LPROD_IN
AFTER INSERT
ON LPROD
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('상품분류가 추가되었습니다');
--NEW : 방금 INSERT된 새로운 그 행
INSERT INTO LPROD_BAK(LPROD_ID, LPROD_GU, LPROD_NM)
VALUES(:NEW.LPROD_ID, :NEW.LPROD_GU, :NEW.LPROD_NM);
END;
/
패키지
EX)
CREATE OR REPLACE PACKAGE PKG_EASY
IS
V_NAME VARCHAR2(60);
--회원의 아이디 및 숫자를 받아 마일리지 부여
PROCEDURE PROC_MILEAGE_UP(P_ID IN VARCHAR2, P_MILEAGE IN NUMBER);
--회원의 아이디를 받아 이름을 리턴
FUNCTION FN_GET_NAME(P_ID IN VARCHAR2)
RETURN VARCHAR2;
END PKG_EASY;
/
CREATE OR REPLACE PACKAGE BODY PKG_EASY
IS
--회원의 아이디 및 숫자를 받아 마일리지 부여->상세내용
PROCEDURE PROC_MILEAGE_UP(P_ID IN VARCHAR2, P_MILEAGE IN NUMBER)
IS
BEGIN
UPDATE MEMBER
SET MEM_MILEAGE = MEM_MILEAGE + P_MILEAGE
WHERE MEM_ID = P_ID;
END PROC_MILEAGE_UP;
--회원의 아이디를 받아 이름을 리턴->상세내용
FUNCTION FN_GET_NAME(P_ID IN VARCHAR2)
RETURN VARCHAR2
IS
BEGIN
SELECT MEM_NAME INTO V_NAME FROM MEMBER WHERE MEM_ID = P_ID;
RETURN V_NAME;
END FN_GET_NAME;
END PKG_EASY;
/
--여기까지 컴파일을 함
EXEC PKG_EASY.PROC_MILEAGE_UP('a001',500);
/
SELECT MEM_ID, MEM_MILEAGE FROM MEMBER WHERE MEM_ID = 'a001';
/
SELECT PKG_EASY.FN_GET_NAME('a001') FROM DUAL;
/