프로시저
- 매개 변수를 사용할 수 있고 반복해서 사용할 수 있는 이름이 있는 PL/SQL 블록
- 리턴값 없음!
- 연속 실행 또는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL 블록을 데이터베이스에 저장하기 위해 생성
- 데이터베이스 내에서 미리 컴파일되어 저장되므로, 실행시간때 컴파일 해야 하는 SQL문보다 빠르게 실행
- 매개변수: 블록 안에서의 변수와 똑같이 일시적으로 값을 저장하는 역할
- IN
- 호출 환경으로부터 프로시저로 값을 전달
- 상수, 수식 또는 초기화된 변수 사용
- OUT
- 프로시저로부터 호출 환경으로 값을 전달
- 초기화되지 않은 변수를 매개변수로 사용
- 명시적으로 지정해야 함
- IN
CREATE or replace PROCEDURE select_ename(v_empno IN number) IS
v_ename emp.ename%type;
BEGIN
SELECT ename
INTO v_ename
FROM emp
WHERE empno= v_empno;
DBMS_OUTPUT.PUT_LINE('이름 : ' || v_ename);
END;
함수
- 매개 변수를 사용할 수 있고 반복해서 사용할 수 있는 이름이 있는 PL/SQL 블록
- 리턴값 있음, IN 매개변수만 사용
- 프로시저와의 차이점은 결과값을 return한다는 것과 IN 매개변수만 사용 가능하다는 것
CREATEor replace FUNCTION get_incsal (v_empno NUMBER, rate IN NUMBER) RETURN NUMBER
IS
v_sal emp.sal%type;
BEGIN
SELECT sal
INTO v_sal
FROM emp
WHERE empno = v_empno;
v_sal := v_sal * rate;
RETURN v_sal;
END;
트리거
- 데이터베이스에 특정한 변경이 가해졌을 때 이에 대응해서 자동으로 호출하는 일종의 프로시저
- 데이터베이스 테이블에 갱신 DML문이 발생할 때 수행
- INSERT, UPDATE, DELETE문의 사용에 사건을 정의할 수 있으며 이들을 실행할 때 정의된 트리거도 자동실행
- 데이터베이스에 저장
- 뷰에 대해서가 아니라 테이블에 관해서만 정의
- 테이블 생성시 참조 무결성과 데이터 무결성 그 밖의 다른 제약조건으로 정의할 수 없는 복잡한 요구사항에 대한 제약조건을 생성할 수 있다.
- 문장 트리거
- 트리거 사건에 의해 단 한번 실행
- 컬럼의 각 데이터행 제어 불가능
- 컬럼의 데이터 값에 상관없이 변화가 일어남을 감지하여 실행되는 트리거
- 행 트리거
- 컬럼의 각각의 데이터행에 변화가 생길때마다 실행
- 변화가 생긴 데이터행의 실제값 제어 가능
- 데이터행의 실제값을 수정, 변경 또는 저장할 때 사용
CREATE or replace TRIGGER enable_emp
BEFORE
INSERT OR DELETE OR UPDATE
ON EMP
DECLARE -- 변수를 선언할때DECLARE문사용
disable_time EXCEPTION;
BEGIN
IF (TO_CHAR(SYSDATE,'HH24:MI') >= ‘14:00' and TO_CHAR(SYSDATE,'HH24:MI') <= ‘24:00') THEN
RAISE disable_time;
END IF;
EXCEPTION
WHEN disable_time THEN
RAISE_APPLICATION_ERROR(-20500, '업무시간에만 사용 가능합니다.');
END;
CREATE or replace TRIGGER trigger_test
BEFORE UPDATE ON dept
FOR EACH ROW --행트리거
BEGIN
DBMS_OUTPUT.PUT_LINE('변경 전 컬럼 값: ' || :old.dname);
DBMS_OUTPUT.PUT_LINE('변경 후 컬럼 값: ' || :new.dname);
END;'database' 카테고리의 다른 글
| 데이터베이스 프로그래밍 과제 / 최신 데이터베이스 (0) | 2025.06.11 |
|---|---|
| 데이터베이스 성능 향상[Index] (0) | 2025.06.11 |
| Transaction(트랜잭션) (0) | 2025.06.11 |
| PL/SQL 커서(Cursor)와 예외처리 (0) | 2025.06.11 |
| PL/SQL [Oracle] (0) | 2025.06.10 |
