개발/SQL

PL/SQL 기초 가이드: 오라클에서 프로그래밍하기 🚀

예니03 2025. 3. 2. 08:18
반응형

PL/SQL(Procedural Language/Structured Query Language)은 오라클 데이터베이스에서 사용되는 절차적 언어로, SQL과 프로그래밍 기능을 결합하여 복잡한 로직을 쉽게 구현할 수 있도록 도와줍니다. PL/SQL을 활용하면 변수를 선언하고, 조건문과 반복문을 사용하여 자동화된 데이터 처리를 수행할 수 있습니다.

1. PL/SQL의 특징 🔍

✅ SQL을 확장하여 로직을 구현할 수 있음
✅ 블록 구조를 사용하여 모듈화된 프로그램 작성 가능
✅ 예외 처리를 지원하여 오류를 효과적으로 관리
✅ 데이터베이스 내에서 직접 실행 가능하여 성능 최적화

 

2. PL/SQL 기본 구조 📜

PL/SQL 프로그램은 다음과 같은 블록 구조를 가집니다:

DECLARE  -- (선택사항) 변수 선언
BEGIN    -- 실행할 코드 작성
   -- SQL 및 PL/SQL 로직
EXCEPTION  -- (선택사항) 예외 처리
   -- 오류 발생 시 실행할 코드
END;
/

예제: 'Hello, PL/SQL!' 출력하기

BEGIN
   DBMS_OUTPUT.PUT_LINE('Hello, PL/SQL!');
END;
/

DBMS_OUTPUT.PUT_LINE을 사용하면 결과를 출력할 수 있습니다.

 

3. 변수 및 데이터 타입 🎭

PL/SQL에서는 변수를 선언하여 데이터를 저장할 수 있습니다.

DECLARE
   v_name VARCHAR2(50) := '홍길동';
   v_age NUMBER := 25;
BEGIN
   DBMS_OUTPUT.PUT_LINE('이름: ' || v_name || ', 나이: ' || v_age);
END;
/

주요 데이터 타입

  • VARCHAR2(size): 문자열 저장
  • NUMBER(p,s): 숫자 저장 (p=전체 자리수, s=소수점 이하 자리수)
  • DATE: 날짜 및 시간 저장
  • BOOLEAN: 참/거짓 값을 저장

 

4. 조건문 (IF 문) 🌟

IF 문을 사용하여 특정 조건에 따라 실행되는 로직을 작성할 수 있습니다.

DECLARE
   v_score NUMBER := 85;
BEGIN
   IF v_score >= 90 THEN
      DBMS_OUTPUT.PUT_LINE('A 학점');
   ELSIF v_score >= 80 THEN
      DBMS_OUTPUT.PUT_LINE('B 학점');
   ELSE
      DBMS_OUTPUT.PUT_LINE('C 학점');
   END IF;
END;
/

 

 

5. 반복문 (LOOP) 🔄

1) 기본 LOOP 문

DECLARE
   v_count NUMBER := 1;
BEGIN
   LOOP
      DBMS_OUTPUT.PUT_LINE('현재 카운트: ' || v_count);
      v_count := v_count + 1;
      EXIT WHEN v_count > 5;
   END LOOP;
END;
/

2) FOR LOOP 문

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

 

 

6. 프로시저 (Procedure) 🛠️

프로시저는 재사용 가능한 PL/SQL 코드 블록으로, 매개변수를 받아 특정 작업을 수행할 수 있습니다.

CREATE OR REPLACE PROCEDURE greet_user (p_name VARCHAR2) IS
BEGIN
   DBMS_OUTPUT.PUT_LINE('안녕하세요, ' || p_name || '님!');
END;
/

-- 프로시저 실행
BEGIN
   greet_user('철수');
END;
/

 

 

7. 함수 (Function) 🔢

함수는 값을 반환하는 PL/SQL 블록으로, 연산 결과를 반환할 때 유용합니다.

CREATE OR REPLACE FUNCTION add_numbers (a NUMBER, b NUMBER) RETURN NUMBER IS
BEGIN
   RETURN a + b;
END;
/

-- 함수 실행
DECLARE
   v_result NUMBER;
BEGIN
   v_result := add_numbers(10, 20);
   DBMS_OUTPUT.PUT_LINE('결과: ' || v_result);
END;
/

 

 

8. 트리거 (Trigger) ⚡

트리거는 특정 이벤트(INSERT, UPDATE, DELETE)가 발생할 때 자동으로 실행되는 PL/SQL 블록입니다.

CREATE OR REPLACE TRIGGER trg_before_insert
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
   DBMS_OUTPUT.PUT_LINE('새로운 직원이 추가됩니다: ' || :NEW.name);
END;
/
  • :NEW는 새로 삽입되는 값을 참조하는 키워드
  • BEFORE INSERT는 INSERT 전에 실행됨

 

9. 커서 (Cursor) 🔄

커서는 여러 개의 행을 조회하고 순차적으로 처리하는 기능을 제공합니다.

DECLARE
   CURSOR emp_cursor IS SELECT name, salary FROM employees;
   v_name employees.name%TYPE;
   v_salary employees.salary%TYPE;
BEGIN
   OPEN emp_cursor;
   LOOP
      FETCH emp_cursor INTO v_name, v_salary;
      EXIT WHEN emp_cursor%NOTFOUND;
      DBMS_OUTPUT.PUT_LINE('이름: ' || v_name || ', 급여: ' || v_salary);
   END LOOP;
   CLOSE emp_cursor;
END;
/

 

 

✨ 마무리

PL/SQL은 단순한 SQL 문을 넘어 복잡한 로직을 처리하고 자동화할 수 있도록 도와줍니다. 이를 활용하면 효율적인 데이터베이스 프로그래밍이 가능하며, 성능 최적화 및 유지보수도 용이해집니다.

PL/SQL을 연습하면서 더 많은 예제와 실전 문제를 풀어보는 것이 중요합니다! 😃

반응형