본문 바로가기
SQLD

SQL | 절차형 SQL 프로시저, 사용자 정의함수, 트리거

by 개발송이 2022. 2. 26.

1. 절차형 SQL

 

절차형 SQL

: 일반적인 개발언어(C,JAVA...)처럼 SQL언어에서도 절차 지향적인 프로그램(조건문, 반복문)이 가능하도록 하는 트랜잭션 언어

 

절차형 SQL 종류(프사트)

프로시저 일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리 집합
사용자 정의 함수 일련의 SQL처리를 수행하고 , 수행결과를 단일 값으로 반환할 수 있는 절차형 SQL (리턴함수가 필요)
트리거 데이터베이스 시스템에서 삽입, 갱신, 삭제 등의 이벤트가 발생할 때 마다 관련 작업이 자동으로 수행되는 절차형 SQL

 

DBMS_OUTPUT

-메시지를 버퍼에 젖아하고 버퍼로부터 메시지를 읽어오기 위한 인터페이스 패키지

-절차형 SQL이 정상적으로 구현되었는지 테스트하는 목적으로 사용

DBMS_OUTPUT.PUT(문자열); 개행없이 문자열을 출력하는 프로시저
DBMS_OUTPUT.PUT_LINE(문자열); 문자열을 출력 후 개행하는 프로시저

 

IF문

조건이 참인지 거짓인지에 따라 경로를 선택하는 조건문

IF 조건 THEN
  문장;
ELSIF 조건 THEN
  문장;
  ...
ELSE
  문장;
 END IF;

 

간단한 케이스문

-명확한 값을 가지는 조건에 따라 여러 개의 선택 경로 중 하나를 취하고자 할 떄 사용하는 조건문

-범위 같은 더 복잡한 매칭을 수행하려면, 검색된 CASE문을 사용해야 함

CASE 변수
WHEN 값1 THEN
  SET 명령어;
WHEN 값2 THEN
  SET 명령어;
  ...
ELSE
  SET 명령어;
END CASE;

 

검색된 케이스문

-명확한 값 및 범위를 가지는 조건에 따라 여러 개의 선택 경로 중 하나를 취하고자 할 떄 사용하는 조건문

CASE 
WHEN 조건1 THEN SET 명령어;
WHEN 조건2 THEN SET 명령어;
...
ELSE SET 명령어;
END CASE;

 

반복문

LOOP문

-특정 조건이 만족될 때 까지 반복해서 문장을 실행하는 반복문

-EXIT WHEN에 반복문 탈출 조건을 작성한다.

LOOP
문장;
EXIT WHEN 탈출조건;
END LOOP

WHILE문

-시작과 종료 조건을 지정하여 참인 동안에는 해당 문장을 반복해서 실행하는 명령문

-조건이 참일 경우 반복, 조건이 거직이거나 EXIT WHEN 조건이 만족하는 경우 반복문 빠져나옴

WHILE 반복조건 LOOP
문장;
EXIT WHEN 탈출조건;
END LOOP;

FOR LOOP

-시작값과 끝값을 지정해 해당 값이 그 구간 내에 있을 때 반복하는 반복문

FOR 인덱스 IN 시작값.. 종료값
LOOP
 문장;
END LOOP;

 

예외부

-실행 중 발생 가능한 예외상황을 수행하는 부분

EXCEPTION
WHEN 조건 THEN
SET 명령어;

 

 

2. 프로시저

 

일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합

 

프로시저 구성(디비컨 SET)

선언부
(DECLEAR)
-프로시저의 명칭, 변수와 인수 그리고 그에 대한 데이터 타입을 정의하는 부분
시작/ 종료부
(BEGIN/END)
-프로시저의 시작과 종료를 표현하며 BEGIN.END가 쌍을 이룸
-다수 실행을 제어하는 기본적 단위가 되며 논리적 프로세스를 구성
제어부
(CONTROL)
-순차적으로 처리
-조건문과 반복문을 이용하여 문장을 처리
SQL -DML을 주로 사용
-자주 사용되지 않지만 DDLTRUNCATE 사용
예외부
(EXCEPTION)
-BEGIN~END 절에서 실행되는 SQL문이 실행될 때 예외 발생 시 예외처리 방법 정의하는 처리부
실행부
(TRANSCATION)
-프로시저에서 수행된 DML 수행 내역의 DBMS의 적용 또는 취소 여부를 결정하는 처리부

 

프로시저 문법

CREATE [OR REPLACE] PROCESUR 프로시저_명(파라미터 _명[IN|OUT|INOUT] 데이터타입,...)
IS
 변수선언
BEGIN
 명령어;
[COMMIT|ROLLBACK]
END;
문법 설명
[OR REPLACE] 기존 프로시저 존재 시에 현재 컴파일하는 내용으로 덮어씀
모드 변수의 입출력을 구분하고, IN/OUT/INOUT 3가지로 구성
BEGIN 프로시저의 시작을 알려주는 키워드
COMMIT 하나의 트랜잭션이 성공적으로 끝나고, 데이터베이스가 일관성 있는 상태에 있을 때 하나의 트랜잭션이 끝났을 때 사용하는 연산
ROLL BACK 하나의 트랜잭션이 비정상적으로 종료되어 트랜잭션 원자성이 깨질 경우 처음부터 다시 시작하거나, 부분적으로 연산을 취소하는 연산
END 프로시저의 끝을 알려주는 키워드

 

 

3. 사용자 정의함수

일련의 SQL처리를 수행하고, 수행 결과를 단일 값으로 반환할 수 있는 절차형 SQL

 

-기본적인 사항은 프로시저와 동일하고 반환에서의 부분만 프로시저와 다르다

-사용자 정의함수의 호출을 통해 실행되며, 반환하는 단일 값을 조회 또는 삽입, 수정 작업에 이용하는것이 일반적

-기본적인 개념 및 사용법, 문법 등은 프로시저와 동일하며, 종료 시 단일 값을 반환

 

구성(디비컨 SER)

선언부
(DECLEAR)
-프로시저의 명칭, 변수와 인수 그리고 그에 대한 데이터 타입을 정의하는 부분
시작/ 종료부
(BEGIN/END)
-사용자 정의함수의 시작과 종료를 표현하는데 필수적, BEGIN/END가 쌍을 이루어 추가되므로 브록으로 구성
-다수 실행을 제어하는 기본적 단위가 되며 논리적 프로세스를 구성
제어부
(CONTROL)
-순차적으로 처리
-비교 조건에 따라 블록 또는 문장을 실행
-조건에 따라 반복 실행
SQL -조회 용도로 SELECT 문을 사용
-데이터를 조작하는 INSERT, DELECT, UPSATE는 사용할 수 없음
예외부
(EXCEPTION)
-BEGIN~END 절에서 실행되는 SQL문이 실행될 때 예외 발생 시 예외처리 방법 정의하는 처리부
반환부
(RETURN)
-호출문에 대한 함숫값을 반환

 

 

4. 트리거

-트리거는 데이터베이스 시스템에서 삽입, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행하는 절차형 SQL이다.

-이벤트는 전체 트랜잭션 대상과 각행에 의해 발생하는 경우 모두를 포함할 수 있으며 테이블과 뷰, DB작업을 대상으로 정의할 수 있다.

 

목적

-특정 테이블에 대한 데이터 변경을 시작점으로 설정하고, 그와 관련된 작업을 자동적으로 수행하기 위해 트리거 사용

-일반적으로 이벤트와 관련된 테이블의 데이터 삽입, 추가, 삭제 작업을 DBMS가 자동적으로 실행시키는 데 활용

-데이터 무결성 유지 및 로그 메시지 출력 등의 별도 처리를 위해 트리거 사용

 

종류

-행 트리거 : 데이터 변화가 생길 때마다 실행

-문장 트리거 : 트리거에 의해 단 한 번 실행

 

구성

-반환 값이 없다는 점, DML을 주된 목적으로 한다는 점에서는 프로시저의 유사함

-EVENT 명령어를 통해 트리거 실행을 위한 이벤트를 인지한다는 점, 외부변수 IN/OUT이 없다는 점은 프로시저나 사용자 정의함수와 다르다.

'SQLD' 카테고리의 다른 글

SQL | 데이터 조작 프로시저 성능개선  (0) 2022.02.26
SQL | 응용 SQL 집계함수, 그룹함수, 윈도함수  (0) 2022.02.26
SQL | DCL  (0) 2022.02.25
SQLD | SQL 기본  (0) 2022.02.22
SQLD | 데이터 모델과 성능  (0) 2022.02.21