대덕인재/Oracle

[Oracle D-17] PL/SQL에서 사용되는 프로그래밍 구조(Program Units)

꼬마버거 2025. 4. 23. 16:43

🌾 PL/SQL이 뭐야?

📜 공식 정의:

**PL/SQL (Procedural Language/SQL)**은 Oracle에서 제공하는 SQL을 확장한 프로그래밍 언어야.
SQL로는 힘든 조건문, 반복문, 변수 사용, 오류 처리 등을 할 수 있게 만들어진 거지.

💬 쉽게 말하면?

"SQL은 선언문만 있는 언어야.
PL/SQL은 그 SQL에 '조건문 + 반복문 + 함수 + 절차(Procedure)' 같은 두뇌를 붙여준 언어야."

"Oracle의 PL/SQL 프로그램 단위(Program Units) 로, 데이터베이스에서 반복작업, 계산, 이벤트 반응 등을 자동화하고 효율화하기 위해 사용된다."

 

 

⚙️ PL/SQL에서 가능한 것들


 

기능 설명 예시
✅ 변수 선언 값을 저장할 수 있음 v_salary NUMBER;
🔁 반복문 반복 작업 가능 FOR i IN 1..10 LOOP ... END LOOP;
🔀 조건문 조건 따라 다르게 처리 IF ... THEN ... ELSE ... END IF;
🧠 함수/프로시저 반복 작업 저장해두기 CREATE PROCEDURE ...
💣 예외 처리 오류에 자동 대응 가능 EXCEPTION WHEN ... THEN ...

🧱 PL/SQL 블록 구조 (기본틀)

DECLARE
  -- 변수 선언
BEGIN
  -- 실행할 SQL, 로직
EXCEPTION
  -- 오류 처리
END;
  • DECLARE: 변수 선언하는 공간 (선택사항)
  • BEGIN: 주 실행부
  • EXCEPTION: 오류 생겼을 때 처리할 부분
  • END;: 종료!

🤔 PL/SQL 왜 써야 해?


SQL만 쓸 때 PL/SQL 쓸 때
조건, 반복 어려움 조건문, 반복문 가능
재사용 어려움 프로시저/함수로 재사용 가능
오류 처리 어려움 EXCEPTION 블록으로 에러 대응 가능
자동화 불가 트리거나 루틴으로 자동 처리 가능

📌 요약 정리!

  • PL/SQL은 Oracle 전용 SQL + 프로그래밍 언어
  • 복잡한 업무 로직을 처리하기 위해 꼭 필요함
  • 조건문, 반복문, 변수, 예외 처리, 프로시저 등을 쓸 수 있음
  • 데이터베이스 자동화 작업, 복잡한 계산, 반복 업무에 탁월

 

 

 

🎓 한 줄 정의 정리:

개념 정의
Anonymous Block 이름이 없는 일회용 PL/SQL 코드 블록으로, 즉석에서 실행되고 저장되지 않음
Stored Procedure 이름이 있는 저장된 명령 블록으로, 반복 작업을 실행하기 위해 호출할 수 있음
User Function 입력값을 받아 결과값을 반환하는 사용자 정의 함수
Package 관련된 프로시저, 함수, 변수 등을 하나로 묶은 논리적 그룹
Trigger 특정 이벤트(INSERT, UPDATE, DELETE)가 발생할 때 자동으로 실행되는 PL/SQL 블록

 

🧱 1. Anonymous Block (익명 블록)

"이건 그냥 잠깐 쓰고 버리는 메모장이야."

💬 비유: 마을사람이 대나무 쪼가리에 임시로 적어두는 메모
예: "오늘은 논에 물대기 → 끝나면 불태우기"

💡 특징:

  • 이름이 없어 (익명이야!)
  • 한 번 실행하고 나면 사라져
  • 자주 쓰는 일보다는 일회성 작업에 사용
BEGIN
  DBMS_OUTPUT.PUT_LINE('안녕하세요 고조선!');
END;

🏺 2. Stored Procedure (저장 프로시저)

"이건 마을 공식 절차서야. 언제든지 꺼내서 쓸 수 있지."

💬 비유: 마을 공무원이 갖고 있는 절차 매뉴얼
예: "농사 시작 절차: 땅 고르기 → 씨 뿌리기 → 물 대기"

💡 특징:

  • 이름이 있어서 언제든 호출 가능
  • 반복되는 작업을 저장해두는 용도
  • 입력값을 받고, 출력 없이 실행하는 경우 많음
CREATE PROCEDURE say_hello IS
BEGIN
  DBMS_OUTPUT.PUT_LINE('고조선에 인사!');
END;

🧪 3. User Function (사용자 정의 함수)

"이건 계산기야! 입력하면 결과가 딱 나와."

💬 비유: 마을 계산사에게 '소 3마리 값 얼마야?' 물어보면 정확히 말해줌

💡 특징:

  • 이름 있음
  • 입력값 → 결과 반환
  • SELECT 문 안에서도 쓸 수 있음
CREATE FUNCTION get_area(width NUMBER, height NUMBER)
RETURN NUMBER
IS
BEGIN
  RETURN width * height;
END;

 


📦 4. Package (패키지)

"이건 서랍장이야. 관련 절차들을 묶어 놓았지."

💬 비유: 마을 문서 보관함 — “농사 관련”, “건축 관련” 등 테마별로 정리

💡 특징:

  • 여러 개의 프로시저, 함수, 변수 등을 묶어 놓은 것
  • **패키지 사양(명세)**과 **본문(구현)**으로 나뉘어 있음
-- 명세
CREATE PACKAGE farming_pkg AS
  PROCEDURE start_farming;
  FUNCTION calc_crop_yield RETURN NUMBER;
END;

-- 본문
CREATE PACKAGE BODY farming_pkg AS
  PROCEDURE start_farming IS
  BEGIN
    DBMS_OUTPUT.PUT_LINE('농사 시작!');
  END;

  FUNCTION calc_crop_yield RETURN NUMBER IS
  BEGIN
    RETURN 100;
  END;
END;
 
 
 

⚡ 5. Trigger (트리거)

"이건 마을 감시꾼이야. 일이 생기면 바로 반응하지!"

💬 비유: 마을 창고지기가 말해. “누가 창고문 열면 나 바로 알람칠거야!”

💡 특징:

  • 자동으로 실행됨 (데이터 삽입/수정/삭제될 때)
  • 사람이 직접 실행하는 게 아님
  • 데이터 변화를 감시하고 자동 반응
CREATE TRIGGER watch_dog
BEFORE INSERT ON villagers
FOR EACH ROW
BEGIN
  DBMS_OUTPUT.PUT_LINE('새로운 주민이 들어옵니다!');
END;

 

 

✨ 총정리 요약표


 

이름 뭐냐고? 비유 언제 실행?
Anonymous Block 1회용 메모 대나무 쪼가리에 쓴 메모 직접 실행
Stored Procedure 이름 있는 절차서 농사 매뉴얼 직접 실행
Function 입력 → 결과 주는 계산기 면적 계산기 직접 실행 or SELECT 안에서
Package 절차들을 서랍장처럼 정리한 것 '농사' 관련 서랍장 직접 실행
Trigger 자동반응 시스템 창고 감시꾼 자동 실행

'대덕인재 > Oracle' 카테고리의 다른 글

[Oracle D-18] 분기문  (0) 2025.04.24
[Oracle D-17] LOOP  (0) 2025.04.23
[Oracle D-16] SYNONYM 객체  (0) 2025.04.22
[Oracle D-16] 비트맵 인덱스(Bitmap Index)  (0) 2025.04.22
[Oracle D-16] 시퀀스(Sequence)  (0) 2025.04.22