2.2.8 절차형 SQL
절차형 SQL 개요
- 일반 개발 언어처럼 SQL 언어에서도 절차 지향적 프로그램이 가능하도록 하는 트랜잭션 언어
- PROCEDURE, USER DEFINED FUNCTION, TRIGGER
- 조건에 따른 분기처리를 이용해 특정 기능을 수행하는 저장 모듈을 생성할 수 있고,
PL/SQL 개요
특징
- 저장모듈이란 PL / SQL 문장을 데이터베이스 서버에 저장하여 사용자와 애플리케이션 사이에 공유할 수 있도록 만든 일종의 SQL 컴포넌트 프로그램이며, 완전한 실행 프로그램
- 처리결과 반환하지 않거나 한 개 이상의 값을 반환함.
Oracle 저장 모듈에는 Procedure, User Defined Function, Trigger가 있다.
- Block 구조로 되어있어 기능별로 모듈화 가능
- 변수, 상수 등을 선언하여 SQL 문장 간 값 교환 가능
- IF, LOOF 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하도록 함
- DBMS 정의 에러나 사용자 정의 에러를 정의하여 사용 가능
- PL/SQL은 Oracle에 내장되어있어서, 이를 지원하는 어떤 서버로도 프로그램을 옮길 수 있음
- PL / SQL은 응용 프로그램의 성능을 향상시킴
- 이는 SQL 문장을 여러 블록으로 묶고 한 번에 블록 전부를 서버로 보내기 때문에 통신량을 줄일 수 있음
- PL/SQL 엔진: 프로그램 문장 처리
- SQL Statement Executor: SQL 문장 처리
구조

- 선언부(DECLARE) : 프로시저의 명칭, 변수와 인수 그리고 그에 대한 데이터 타입을 정의하는 부분
- 시작/종료부(BEGIN/END) : 프로시저의 시작과 종료를 표현
- 제어부(CONTROL) :
- 예외부(EXCEPTION) : BEGIN~END 절에서 실행되는 SQL 문이 실행될 때 예외 발생 시 예외 처리 방법을 정의하는 처리부
기본 문법
CREATE [OR REPLACE] PROCEDURE 프로시저명
(파라미터명 [IN|OUT|INOUT] 데이터타입, ... ... )
IS
변수선언
BEGIN
명령어;
[COMMIT|ROLLBACK]
END;
T-SQL 개요
특징
-
T-SQL은 근본적으로 SQL Server를 제어하기 위한 언어로서, SQL에 약간의 기능을 더 추가해 보완적으로 만든 것
-
전역변수 선언은 @@, 지역변수 선언은
전역변수는 이미 SQL 서버에 내장된 값, 지역변수는 사용자의 연결시간 동안만 사용하기위해 만들어짐
-
int, float, varchar 등의 자료형 사용 가능
-
연산자 사용 가능
-
IF-ELSE, WHILE, CASE-THEN 등의 흐름 제어 기능
-
주석 기능은 '--, /**/' 으로 사용 가능
구조

기본 문법
CREATE PROCEDURE [SCHEMA_NAME.]프로시저명
(파라미터명 [IN|OUT|INOUT] 데이터타입, ... ... )
AS
변수선언
BEGIN
명령어;
ERROR
명령어;
END;
User Defined Function의 생성과 활용
- Function이 Procedure와 다른 점은 RETURN을 이용하여 하나의 값을 반드시 되돌려 줘야 한다는 것
CREATE [OR REPLACE] FUNCTION 함수명
(파라미터명 IN 데이터타입, ... ... )
RETURN 데이터타입
IS
변수선언
BEGIN
명령어;
RETURN 변수;
[COMMIT|ROLLBACK]
END;
Trigger의 생성과 활용
- 트리거란 특정한 테이블에 INSERT, UPDATE, DELETE와 같은 DML문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램
CREATE [OR REPLACE] TRIGGER 트리거명
[BEFORE|AFTER] 유형 ON 테이블명
[FOR EACH ROW]
BEGIN
END;
프로시저와 트리거의 차이점
- 프로시저는 BEGIN~END 절 내에 COMMIT, ROLLBACK과 같은 트랜잭션 종료 명령어를 사용할 수 있지만
- 데이터베이스 트리거는 BEGIN~END 절 내에 사용할 수 없다.

SQLD 참고자료