본문 바로가기
database/oracle

🧱 21편. PL/SQL 기본 문법과 블록 구조

by 죄니안죄니 2025. 5. 7.

🧱 21편. PL/SQL 기본 문법과 블록 구조

PL/SQL은 Oracle의 절차형 언어로, SQL + 프로그래밍 구조(if, loop 등)를 조합하여 복잡한 로직을 처리할 수 있게 합니다.
이번 글에서는 PL/SQL의 기본 구조인 블록 구조와 변수 선언, 흐름 제어 등의 기초 문법을 정리합니다.


📌 1. PL/SQL이란?

Procedural Language / SQL의 약자로, SQL에 조건문, 반복문, 예외 처리 등을 추가한 Oracle 고유의 확장 언어입니다.
데이터베이스 내부에서 절차적 로직을 실행할 수 있어 트리거, 함수, 프로시저 등에 활용됩니다.


🔖 2. PL/SQL 블록 구조


DECLARE
  -- 선언부 (선택)
  변수 선언
BEGIN
  -- 실행부 (필수)
  SQL 또는 로직 수행
EXCEPTION
  -- 예외 처리부 (선택)
  예외 발생 시 처리
END;
  • DECLARE: 변수나 상수, 커서 등을 선언
  • BEGIN: 실제 로직 실행
  • EXCEPTION: 오류 발생 시 대응
  • END: 블록 종료

🔧 3. 변수 선언 및 기본 출력


DECLARE
  v_name VARCHAR2(50);
BEGIN
  v_name := '홍길동';
  DBMS_OUTPUT.PUT_LINE('이름: ' || v_name);
END;

DBMS_OUTPUT.PUT_LINE은 콘솔 출력용으로 자주 사용됩니다.


🔁 4. 제어문 (IF, LOOP)

IF 문


IF v_sal > 3000 THEN
  DBMS_OUTPUT.PUT_LINE('고연봉');
ELSE
  DBMS_OUTPUT.PUT_LINE('평균 이하');
END IF;

LOOP 문


FOR i IN 1 .. 5 LOOP
  DBMS_OUTPUT.PUT_LINE('i = ' || i);
END LOOP;

🚨 5. 예외 처리 구조


BEGIN
  -- 0으로 나누기 시도
  DECLARE
    v_result NUMBER;
  BEGIN
    v_result := 100 / 0;
  EXCEPTION
    WHEN ZERO_DIVIDE THEN
      DBMS_OUTPUT.PUT_LINE('0으로 나눌 수 없습니다');
  END;
END;
  • NO_DATA_FOUND: SELECT INTO에서 결과 없을 때
  • TOO_MANY_ROWS: SELECT INTO에서 2건 이상
  • ZERO_DIVIDE: 0 나눗셈

🧠 실무 팁

  • PL/SQL은 SQL문과 다르게 ;(세미콜론)과 /로 종료 필요
  • 스크립트 실행 시에는 SET SERVEROUTPUT ON 명령 필수
  • 디버깅은 DBMS_OUTPUT.PUT_LINE 활용

📝 마무리

이번 글에서는 PL/SQL의 기본 블록 구조와 문법을 살펴봤습니다.
다음 글에서는 프로시저, 함수, 트리거의 구조와 작성법을 이어서 설명드리겠습니다.

댓글