OracleSQL 핵심정리12 - 저장프로시저, 저장함수, 커서, 트리거
저장프로시저
- PL/SQL문을 데이터베이스에 저장하여 재사용 가능하게 만든 데이터베이스 오브젝트
- 데이터베이스에 저장할 수 있도록 저장 프로시저를 제공
- ex)
CREATE [OR REPLACE] PROCEDURE 프로시저명 (매개변수) IS 지역변수선언 BEGIN 실행할 문장 END;
- ex)
USER_SOURCE
: 프로시저 생성 확인- 매개변수 유형
IN
: 데이터 전달 받을 때 사용OUT
: 수행된 결과를 받아갈 때 사용INOUT
: 매개변수 선언시 사용
- 실행 방법
- ex)
EXCUTE 프로시저명(매개변수)
: 프로시저를 실행 - 매개변수에 값을 전달하고 결과를 받기 위해 바인드 변수 사용 가능
- ex)
바인드 변수
: 프로시저 수행 후 구해진 결과를 받아오기 위해서 사용하는 변수- ex)
VARIABLE 변수명 변수타입
- OUT 매개변수 사용: 실행 시 바인드 변수 앞에
:
을 붙여 값을 저장 - 바인드 변수 출력 :
PRINT 변수명;
- ex)
- 저장프로시저의 장점
- 클라이언트와 서버 간의 네트워크 트래픽 감소 : 필요한 데이터 처리를 서버 측에서 완료하므로 네트워크 부하 감소
- 처리 속도 향상 : 데이터베이스 서버에서 직접 실행되므로 데이터 처리가 빠름
저장함수
- 저장프로시저와 유사한 용도로 사용하나 실행 결과를 되돌려 받을 수 있음
- 데이터를 조회하거나 계산된 값을 반환할 필요가 있을 때 유용
- 생성 방법
- ex)
CREATE [OR REPLACE] FUNCTION 함수명 (매개변수) IS 지역변수선언; BEGIN 실행할 문장 RETURN 값; END 함수명;
OR REPLACE
: 기존에 같은 이름의 함수가 있을 경우 이를 대체하여 새로운 함수를 생성매개변수
: 함수에 전달할 입력값의 타입을 정의RETURN
: 함수가 실행 후 되돌려줄 값의 데이터 타입을 명시합니다.
- ex)
- 실행 방법
- ex)
DECLARE 결과변수 타입; BEGIN 결과변수 := 함수명(매개변수); END;
- 바인드 변수를 사용하여 함수의 반환 값을 저장
- ex)
CURSOR
CURSOR
: SQL 쿼리로부터 반환된 여러 행의 결과를 순차적으로 처리하기 위한 PL/SQL 구조- 선언 방법
DECLARE CURSOR 커서명 IS 셀렉트문; BEGIN OPEN 커서명; FETCH 커서명 INTO 변수; CLOSE 커서명; END;
DECLARE
:DECLARE CURSOR 커서명 IS 셀렉트문;
을 사용하여 커서를 선언. 커서에 실행할 SQL 쿼리를 지정OPEN
:OPEN 커서명;
을 통해 커서가 지정한 SELECT 문을 실행하고 결과 세트를 메모리에 저장FETCH
:FETCH 커서명 INTO 변수;
를 통해 커서로부터 데이터를 한 행씩 가져와서 데이터를 지정한 변수에 저장CLOSE
:CLOSE 커서명;
으로 커서를 닫고, 메모리에 할당된 자원을 해제
- 커서 상태
%FOUND
: 마지막 FETCH 연산이 성공적으로 데이터를 반환했을 때 TRUE <->%NOTFOUND
%ISOPEN
: 커서가 현재 열려있을 때 TRUE%ROWCOUNT
: 현재까지 FETCH된 행의 총 수를 반환
TRIGGER
- 데이터베이스에서 특정 이벤트(INSERT, UPDATE, DELETE)가 발생했을 때 자동으로 실행되는 프로시저
- 데이터의 무결성 유지, 감사 로그 기록, 자동 계산 수행 등 다양한 용도로 활용
- 생성 방법
- ex)
CREATE TRIGGER 트리거명 TIMING[BEFORE | AFTER] EVENT[INSERT | UPDATE | DELETE] ON 테이블명 BEGIN 실행할문장 END
TIMING
: 트리거가 실행될 시점을 정의. BEFORE는 DML문이 실행되기 전, AFTER는 실행된 후를 의미EVENT
: 트리거를 발생시키는 DML문을 지정
문장 레벨 트리거
: DML문이 실행될 때 단 한 번만 트리거. 전체 작업에 대한 일괄 처리에 적합행 레벨 트리거
: DML문에 의해 영향을 받는 각 행에 대해 개별적으로 실행. 개별 행의 데이터를 검사하거나 변경할 때 사용
- ex)
- 트리거 생성 시 고려 사항
- 데이터베이스 성능에 영향을 줄 수 있으므로, 필요한 경우에만 사용
- 복잡한 비즈니스 로직을 트리거 내에 너무 많이 포함시키면 유지 관리가 어려워짐
This post is licensed under CC BY 4.0 by the author.