패키지
관련있는 프로시저나 함수를 묶어 관리, 운영하는 기능
명세부
- Create [Or Replace] Package 패키지 명
IS
Procedure 프로시저 명
Functino 함수 명
......
END;
몸체부
- Create [Or Replace] Package Body 패키지 명
IS
Procedure 프로시저 명
-프로시저 생성
Functino 함수 명
- 함수 생성
......
END;
실행
- EXECUTE [패키지명].[프로시저/함수 명];
ex)
<명세부>
CREATE OR REPLACE PACKAGE PACK1 is
procedure test2
(v_stu_no in student.stu_no%type,
v_stu_grade in student.stu_grade%type);
function test6
(v_enr_grade in number)
return char;
end;
<몸체부>
CREATE OR REPLACE PACKAGE BODY PACK1 IS
PROCEDURE test2 (
v_stu_no IN student.stu_no%TYPE,
v_stu_grade IN student.stu_grade%TYPE
) IS
BEGIN
UPDATE student
SET stu_grade = v_stu_grade
WHERE stu_no = v_stu_no;
END test2;
FUNCTION test6 (
v_enr_grade IN NUMBER
) RETURN char IS
enr_score char;
BEGIN
IF v_enr_grade >= 90 THEN
enr_score := 'A';
ELSIF v_enr_grade >= 80 THEN
enr_score := 'B';
ELSIF v_enr_grade >= 70 THEN
enr_score := 'C';
ELSIF v_enr_grade >= 60 THEN
enr_score := 'D';
ELSE
enr_score := 'F';
END IF;
RETURN enr_score;
END test6;
END pack1;
select pack1.test6(85) from dual;
ONE-TIME ONLY 프로시저와 오버로딩
- ONE-TIME ONLY 프로시저
- 전역변수의 초기화나 기본적으로 처리하여야 할 로직
- 패키지가 실행될 때 무조건 한번만 실행됨
- 패키지 몸체부 가장 마지막 부분에 BEGIN절과 함께 정의됨
- 오버로딩
- 같은 이름의 여러개 프로시저 사용
- 매개변수의 수가 다르거나, 순서를 달리하여 사용
<명세부>
- CREATE OR REPLACE package C202144098.PACK2 is
g_stu_dept varchar2(20);
procedure test12
(v_stu_no in student.stu_no%type);
procedure test12 -오버로딩-
(v_stu_name student.stu_name%type);
End;
<몸체부>
- CREATE OR REPLACE PACKAGE BODY C202144098.PACK2 IS
PROCEDURE test12 (v_stu_no IN student.stu_no%TYPE) IS
v_stu_name student.stu_name%TYPE;
BEGIN
SELECT stu_name
INTO v_stu_name
FROM student
WHERE stu_no = v_stu_no AND stu_dept = g_stu_dept;
DBMS_OUTPUT.PUT_LINE(v_stu_name);
EXCEPTION
WHEN no_data_found THEN
DBMS_OUTPUT.PUT_LINE('컴퓨터정보과에 학생이 없습니다.');
END test12;
PROCEDURE test12 (v_stu_name IN student.stu_name%TYPE) IS
v_stu_no student.stu_no%TYPE;
BEGIN
SELECT stu_no
INTO v_stu_no
FROM student
WHERE stu_name = v_stu_name AND stu_dept = g_stu_dept;
DBMS_OUTPUT.PUT_LINE(v_stu_no);
EXCEPTION
WHEN no_data_found THEN
DBMS_OUTPUT.PUT_LINE('컴퓨터정보과에 학생이 없습니다.');
END test12;
BEGIN
g_stu_dept := '컴퓨터정보';
END; -ONE-TIME ONLY 프로시저
Execute pack2.test12(20191001);
Execute pack2.test12('김종헌');
트리거
어떤 조건에 맞는 이벤트가 일어나면 후속 이벤트를 발생시킴
트리거의 5 요소
- 트리거 유형 : DML 단위의 트리거, 변경된 레코드 단위의 트리거
- 트리거 동작 시점 : 트리거 동작 시점은 Before, After
- 트리거 이벤트 : 트리거를 발생시킬 것 인지를 셜정
- 트리거 조건 : 레코드 단위의 트리거에서만 설정할 수 있는 UPDATE 작업 시 특정 조건을 명시하여 조건에 맞는 레코드의 변셩에서만 트리거 이벤트를 발생
- 트리거 몸체 : BEGIN ~ END절로 동작 정의
트리거의 형식
CREATE [OR REPLACE] TRIGGER 트리거 명
BEFORE | AFTER 이벤트 ON 테이블 명
[FOR EACH ROW]
[WHEN CONDITION]
BEGIN
...................
END;
트리거의 활성화 / 비활성화 / 삭제
ALTER TRIGGER 트리거 명 DISABLE / ENABLE
ALTER TABLE 테이블 명 DISABLE | ENABLE ALL TRIGGER
DROP TRIGGER 트리거
'SQL' 카테고리의 다른 글
프로시저 / 함수 / 커서 - 페치 / 예외처리 (0) | 2024.11.25 |
---|---|
PL/SQL (0) | 2024.11.25 |
데이터 정의어 - DDL (0) | 2024.11.24 |
join (0) | 2024.10.08 |