절차형 SQL, 데이터베이스 관리 시스템(DBMS) 내에서 절차적 프로그래밍 언어의 기능을 제공하여 복잡한 작업을 수행할 수 있도록 돕는 확장 SQL입니다. 표준 SQL이 선언적(declarative)인 반면, 절차형 SQL은 프로그래밍 언어와 유사한 제어 구조와 변수 선언, 반복문 등을 활용해 절차적인 흐름을 정의할 수 있습니다.
절차형 SQL의 주요 특징
-
제어 구조 지원
-
조건문(If-Else, Case)
-
반복문(For, While, Loop)
-
-
변수 선언 및 사용
-
작업 중 데이터를 저장하거나 계산 결과를 저장하기 위해 변수를 선언하고 사용할 수 있습니다.
-
-
예외 처리(Exception Handling)
-
예상치 못한 오류나 조건에 대해 대처할 수 있는 구조를 제공합니다.
-
-
프로시저와 함수 지원
-
복잡한 작업을 재사용 가능한 코드 블록으로 분리하여 관리할 수 있습니다.
-
절차형 SQL의 구성 요소
변수 선언
변수는 프로시저나 함수 내에서 데이터를 저장하거나 작업 중 활용됩니다.
DECLARE variable_name datatype [DEFAULT value];
예시:
DECLARE total_sales NUMBER(10, 2);
제어 구조
-
조건문
IF condition THEN
-- 실행 코드
ELSE
-- 다른 실행 코드
END IF;
예시
IF total_sales > 1000 THEN
DBMS_OUTPUT.PUT_LINE('High sales');
ELSE
DBMS_OUTPUT.PUT_LINE('Low sales');
END IF;
-
반복문
FOR i IN 1..10 LOOP
-- 실행 코드
END LOOP;
프로시저
프로시저는 데이터베이스 작업을 처리하는 독립적인 코드 블록입니다.
CREATE OR REPLACE PROCEDURE procedure_name AS
BEGIN
-- SQL 작업
END;
예시
CREATE OR REPLACE PROCEDURE calculate_bonus AS
BEGIN
UPDATE employees
SET bonus = salary * 0.1;
END;
함수
함수는 입력 값을 받아 특정 결과를 반환하는 코드 블록입니다.
CREATE OR REPLACE FUNCTION function_name RETURN return_datatype AS
BEGIN
-- 작업 코드
RETURN result;
END;
예시
CREATE OR REPLACE FUNCTION get_total_sales RETURN NUMBER AS
total NUMBER;
BEGIN
SELECT SUM(sales) INTO total FROM sales_table;
RETURN total;
END;
예외 처리
BEGIN
-- 실행 코드
EXCEPTION
WHEN exception_name THEN
-- 예외 처리 코드
END;
예시:
BEGIN
SELECT salary INTO employee_salary FROM employees WHERE id = 101;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No employee found with the given ID');
END;
절차형 SQL의 장점
-
복잡한 로직 처리 가능: 단순 쿼리로 처리하기 어려운 작업을 효율적으로 수행할 수 있습니다.
-
코드 재사용성: 프로시저와 함수로 반복적인 작업을 모듈화하여 관리합니다.
-
성능 향상: 서버 측에서 실행되므로 네트워크 트래픽 감소와 빠른 데이터 처리 가능.
절차형 SQL의 단점
-
학습 곡선: 표준 SQL보다 복잡하여 학습과 유지보수가 어려울 수 있습니다.
-
DBMS 종속성: 절차형 SQL은 DBMS마다 문법이 다를 수 있습니다(예: PL/SQL, T-SQL 등).
주요 DBMS별 절차형 SQL 지원
-
Oracle: PL/SQL (Procedural Language/SQL)
-
SQL Server: T-SQL (Transact-SQL)
-
PostgreSQL: PL/pgSQL (Procedural Language/PostgreSQL)
절차형 SQL을 활용하면 데이터베이스의 강력한 기능을 극대화할 수 있습니다. 따라서, 데이터 중심 애플리케이션을 개발하거나 복잡한 작업을 효율적으로 처리하고자 할 때 유용하게 사용됩니다.