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;
⸻