메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Oracle (토론 | 기여)님의 2025년 5월 18일 (일) 02:26 판 (→‎= PL/SQL 기초)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

PL/SQL 기초

  • Oracle의 PL/SQL은 Procedural Language extensions to SQL의 약자로, SQL에 절차적 프로그래밍 기능을 추가한 Oracle의 고유한 프로그래밍 언어입니다.
  • SQL은 단순한 질의와 조작에 적합하지만, 복잡한 로직(조건문, 반복문 등)은 어렵기 때문에 이를 보완하기 위해 PL/SQL이 만들어졌습니다.


menu_book PL/SQL 기초 설명
  • (영문)PL/SQL = Procedural Language/Structured Query Language
  • (한글) SQL에 절차적(조건, 반복 등) 프로그래밍 기능을 추가한 Oracle 전용 언어


특징

항목 설명
블록 구조 BEGIN ~ END 사이에 코드 작성 (중첩 가능)
변수 선언 가능 DECLARE 블록을 통해 변수 사용
제어문 지원 IF, CASE, LOOP, FOR, WHILE 등 지원
예외 처리 EXCEPTION 블록으로 오류 처리 가능
SQL 통합 사용 SQL 문과 함께 프로시저, 함수 등 사용 가능


기본 구조 (PL/SQL 블록)


DECLARE
  -- 변수 선언
  v_name VARCHAR2(50);
BEGIN
  -- 실행부
  SELECT first_name INTO v_name
  FROM employees
  WHERE employee_id = 100;

  DBMS_OUTPUT.PUT_LINE('이름: ' || v_name);
EXCEPTION
  -- 예외 처리
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('데이터 없음');
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('기타 오류 발생');
END;


자주 쓰는 문법

변수 선언

v_salary NUMBER(8,2);
v_name   VARCHAR2(100);

조건문

IF v_salary > 5000 THEN
  DBMS_OUTPUT.PUT_LINE('고액 연봉자');
ELSE
  DBMS_OUTPUT.PUT_LINE('일반 연봉자');
END IF;

반복문


FOR i IN 1..5 LOOP
  DBMS_OUTPUT.PUT_LINE('반복: ' || i);
END LOOP;

예외 처리

BEGIN
  -- 실행문
EXCEPTION
  WHEN ZERO_DIVIDE THEN
    DBMS_OUTPUT.PUT_LINE('0으로 나눔');
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('기타 예외');
END;


주의사항

  • DBMS_OUTPUT.PUT_LINE은 결과를 화면에 출력하는 Oracle 내장 프로시저 (SQL*Plus 또는 SQL Developer에서 SET SERVEROUTPUT ON 필요)
  • PL/SQL은 오직 Oracle에서만 작동, 다른 DBMS(MySQL, SQL Server 등)에서는 사용 불가

예제 (전체 흐름)


SET SERVEROUTPUT ON;

DECLARE
  v_id NUMBER := 101;
  v_name employees.first_name%TYPE;
BEGIN
  SELECT first_name INTO v_name
  FROM employees
  WHERE employee_id = v_id;

  DBMS_OUTPUT.PUT_LINE('직원 이름: ' || v_name);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('직원이 존재하지 않습니다.');
END;


PL/SQL 프로시저 / 함수 만드는 법

커서(Cursor) 사용법

예외처리 고급 예시