Postgres/Features

PL/SQL

moxie2ks 2025. 5. 2. 18:01
728x90
반응형

개요

PL/SQL(Procedural Language extension to SQL)은 Oracle 데이터베이스 시스템에서 사용되는 프로시저 언어로, 표준 SQL에 절차적 프로그래밍 기능을 확장한 것이다. 1991년 Oracle 6에서 처음 도입되었으며, 현재 Oracle 데이터베이스 환경에서 주요 프로그래밍 언어로 사용되고 있다.

설명

PL/SQL은 SQL의 기능을 확장하여 변수 선언, 조건문, 반복문과 같은 프로그래밍 구조를 제공한다. SQL만으로는 구현하기 어려운 복잡한 비즈니스 로직을 데이터베이스 내에서 직접 처리할 수 있게 해 준다. PL/SQL은 블록 구조로 되어 있으며, 각 블록은 선언부(DECLARE), 실행부(BEGIN), 예외 처리부(EXCEPTION)로 구성된다.

데이터베이스 서버 내에서 실행되기 때문에 네트워크 트래픽을 줄이고 성능을 향상시키는 장점이 있다. 또한 데이터베이스 트리거, 저장 프로시저, 함수 등을 통해 데이터베이스 애플리케이션의 개발과 유지보수를 효율적으로 관리할 수 있다.

특징

  1. 블록 구조: PL/SQL 코드는 블록으로 구성되며, 각 블록은 독립적으로 실행될 수 있다.
  2. 절차적 언어 기능: 변수 선언, 조건문(IF-THEN-ELSE), 반복문(LOOP, WHILE, FOR) 등 일반 프로그래밍 언어의 기능을 제공한다.
  3. 예외 처리: 실행 중 발생할 수 있는 오류를 처리하는 메커니즘이 내장되어 있다.
  4. 커서(Cursor): SQL 쿼리 결과를 처리하기 위한 특별한 메모리 영역을 제공한다.
  5. 패키지(Package): 관련된 프로시저, 함수, 변수 등을 그룹화하여 모듈화할 수 있다.
  6. 트리거(Trigger): 특정 이벤트(삽입, 수정, 삭제 등)가 발생했을 때 자동으로 실행되는 코드를 정의할 수 있다.
  7. 서버 측 실행: 클라이언트가 아닌 데이터베이스 서버에서 코드가 실행되어 네트워크 트래픽을 줄이고 성능을 향상시킨다.

예제

다음은 간단한 PL/SQL 블록의 예제이다:

DECLARE
  -- 변수 선언
  v_employee_id NUMBER := 100;
  v_employee_name VARCHAR2(100);
  v_department_name VARCHAR2(100);
BEGIN
  -- SQL 문장 실행 및 결과를 변수에 저장
  SELECT e.first_name || ' ' || e.last_name, d.department_name
  INTO v_employee_name, v_department_name
  FROM employees e
  JOIN departments d ON e.department_id = d.department_id
  WHERE e.employee_id = v_employee_id;

  -- 결과 출력
  DBMS_OUTPUT.PUT_LINE('사원 이름: ' || v_employee_name);
  DBMS_OUTPUT.PUT_LINE('부서명: ' || v_department_name);

EXCEPTION
  -- 예외 처리
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('해당 ID의 사원이 존재하지 않습니다.');
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('오류 발생: ' || SQLERRM);
END;

저장 프로시저 예제:

CREATE OR REPLACE PROCEDURE update_salary(
  p_employee_id IN NUMBER,
  p_percent IN NUMBER
)
IS
BEGIN
  UPDATE employees
  SET salary = salary * (1 + p_percent/100)
  WHERE employee_id = p_employee_id;

  COMMIT;

  DBMS_OUTPUT.PUT_LINE('급여가 성공적으로 수정되었습니다.');
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('해당 ID의 사원이 존재하지 않습니다.');
  WHEN OTHERS THEN
    ROLLBACK;
    DBMS_OUTPUT.PUT_LINE('오류 발생: ' || SQLERRM);
END update_salary;

결론

PL/SQL은 Oracle 데이터베이스에서 복잡한 비즈니스 로직을 구현하는 데 필수적인 도구이다. SQL의 데이터 처리 기능과 절차적 프로그래밍 언어의 유연성을 결합하여 강력한 데이터베이스 애플리케이션을 개발할 수 있게 해 준다. 서버 측에서 실행되는 특성으로 인해 성능이 최적화되며, 트리거, 저장 프로시저, 함수 등의 다양한 객체를 통해 데이터베이스 시스템의 기능을 확장할 수 있다. 데이터베이스 중심 애플리케이션 개발에 있어 PL/SQL의 이해는 Oracle 환경에서 일하는 개발자에게 필수적인 역량이다.

참고문헌

  1. Oracle 공식 PL/SQL 문서: https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/index.html
  2. Oracle PL/SQL Programming by Steven Feuerstein: https://www.oreilly.com/library/view/oracle-plsql-programming/9781449324445/
  3. Oracle Database 개발자 가이드: https://www.oracle.com/database/technologies/appdev/plsql.html
728x90
반응형