본문 바로가기
Database

오라클 PL/SQL과 SQL의 차이점 이해하기

by 굿센스굿 2024. 12. 3.
반응형


오라클 데이터베이스를 다룰 때, SQL과 PL/SQL은 핵심적인 역할을 합니다. SQL은 데이터베이스와 상호작용하는 기본 언어로 데이터를 조회하고 조작하는 데 사용됩니다. 반면, PL/SQL은 SQL의 기능을 확장하여 절차적 프로그래밍 기능을 제공하며, 복잡한 로직과 트랜잭션 관리를 가능하게 합니다. 이번 글에서는 SQL과 PL/SQL의 차이점을 이해하기 쉽게 정리하고, 각 언어의 특징과 활용 사례를 예제로 설명하겠습니다.


1. SQL: 관계형 데이터베이스와 상호작용

**SQL(Structured Query Language)**는 데이터베이스의 데이터를 정의, 조회, 수정, 삭제하는 표준 언어입니다.

  • 주요 특징
    • 선언형 언어로, 무엇을 해야 하는지를 지정.
    • 단일 명령문으로 작업 수행.
    • 데이터 정의(DDL), 데이터 조작(DML), 데이터 제어(DCL) 명령 포함.
    • 데이터 중심적이며, 로직 처리를 직접적으로 지원하지 않음.
  • 주요 SQL 명령
    • DDL: CREATE, ALTER, DROP (데이터베이스 객체 정의).
    • DML: SELECT, INSERT, UPDATE, DELETE (데이터 조작).
    • DCL: GRANT, REVOKE (권한 관리).
  • 예제
  • -- employees 테이블에서 모든 데이터 조회 SELECT employee_id, first_name, salary FROM employees; -- employees 테이블에 새로운 직원 추가 INSERT INTO employees (employee_id, first_name, salary) VALUES (101, '홍길동', 5000);

2. PL/SQL: SQL의 확장 언어

**PL/SQL(Procedural Language/SQL)**는 오라클이 SQL의 기능을 확장하여 절차적 프로그래밍을 지원하는 언어입니다.

  • 주요 특징
    • 절차형 언어로, 어떻게 수행할지를 지정.
    • SQL 문장을 포함하여 변수 선언, 조건문, 반복문 등을 사용 가능.
    • 복잡한 비즈니스 로직과 트랜잭션 처리 지원.
    • 에러 처리와 커서(Cursor)를 사용한 데이터 조작 가능.
    • SQL과 PL/SQL의 명령을 결합하여 실행.
  • 주요 PL/SQL 구조
    • 블록 구조: 익명 블록, 저장 프로시저, 함수, 트리거로 구분.
    • 제어 구조: 조건문(IF-THEN-ELSE), 반복문(FOR, WHILE).
  • 예제
  • DECLARE v_total_salary NUMBER; BEGIN -- employees 테이블의 총 급여 계산 SELECT SUM(salary) INTO v_total_salary FROM employees; -- 총 급여 출력 DBMS_OUTPUT.PUT_LINE('총 급여: ' || v_total_salary); END;

3. SQL과 PL/SQL의 주요 차이점

구분 SQL PL/SQL

언어 유형 선언형 언어 (데이터 중심) 절차형 언어 (로직 중심)
기능 데이터 조회 및 조작 복잡한 로직, 제어 구조, 트랜잭션 처리 지원
실행 단위 개별 명령 실행 전체 블록 실행
에러 처리 에러 처리 기능 없음 예외 처리(EXCEPTION) 블록 제공
사용 목적 간단한 데이터 조작 복잡한 로직과 트랜잭션 처리
성능 단순 작업에 효율적 복잡한 작업을 배치 처리하여 성능 최적화 가능

4. SQL과 PL/SQL의 조합 활용

PL/SQL은 SQL과 함께 사용되며, 데이터베이스 내에서 복잡한 작업을 수행할 때 강력한 도구로 활용됩니다.

(1) 데이터 조회 후 조건 처리

DECLARE
    v_salary NUMBER;
BEGIN
    -- 특정 직원의 급여 조회
    SELECT salary INTO v_salary FROM employees WHERE employee_id = 101;

    -- 조건에 따라 메시지 출력
    IF v_salary > 10000 THEN
        DBMS_OUTPUT.PUT_LINE('고액 연봉자입니다.');
    ELSE
        DBMS_OUTPUT.PUT_LINE('일반 연봉자입니다.');
    END IF;
END;

(2) 반복문을 사용한 데이터 처리

DECLARE
    CURSOR employee_cursor IS
        SELECT employee_id, salary FROM employees;
    v_employee_id employees.employee_id%TYPE;
    v_salary employees.salary%TYPE;
BEGIN
    OPEN employee_cursor;
    LOOP
        FETCH employee_cursor INTO v_employee_id, v_salary;
        EXIT WHEN employee_cursor%NOTFOUND;

        -- 조건에 따라 급여 업데이트
        IF v_salary < 3000 THEN
            UPDATE employees
            SET salary = v_salary * 1.1
            WHERE employee_id = v_employee_id;
        END IF;
    END LOOP;
    CLOSE employee_cursor;
END;

5. 실제 업무에서의 SQL과 PL/SQL 사용 사례

  1. SQL 사용 사례
    • 대량의 데이터 조회 및 간단한 변경 작업.
    • 보고서 생성이나 데이터 필터링 작업.
    SELECT department_id, AVG(salary) AS avg_salary
    FROM employees
    GROUP BY department_id;
    
  2. PL/SQL 사용 사례
    • 데이터 검증 및 복잡한 트랜잭션 처리.
    • 트리거를 사용한 자동화 작업.
    CREATE OR REPLACE TRIGGER update_salary_trigger
    AFTER UPDATE OF salary ON employees
    FOR EACH ROW
    BEGIN
        DBMS_OUTPUT.PUT_LINE('급여가 업데이트되었습니다: ' || :NEW.salary);
    END;
    

결론

SQL은 데이터를 정의하고 조작하는 데 초점을 맞춘 언어이며, PL/SQL은 이 SQL의 기능을 확장하여 데이터 처리 로직을 구현할 수 있는 강력한 도구입니다. 두 언어는 각각의 강점이 있으므로, 상황에 맞게 적절히 활용하면 데이터베이스와의 상호작용에서 최대의 효율을 낼 수 있습니다. SQL로 데이터를 다루는 기본기를 익힌 뒤, PL/SQL을 통해 복잡한 비즈니스 로직을 구현해 보세요!

반응형