본문 바로가기
2.2 DB/ORACLE

[Oracle PL/SQL] PL/SQL 기본개념

by Dohi._. 2024. 10. 21.
728x90

PL/SQL (Procedural Language extension to SQL)

PL/SQL은 SQL을 확장한 절차적 언어

  • SQL 단점을 해결
    • 변수선언가능
    • 조건문 가능
    • 반복문 가능
    • 예외처리 가능

 

PL/SQL은 블록단위로 실행하며 3개로 나눠서 구성되어있다.

  • 선언부(DECLARE)  [생략가능]   
  • 실행부(BEGIN) [필수]
  • 예외처리(EXCEPTION)  [생략가능]
  • END;(종료)  [필수]
    마지막 라인에 /를 입력하면 해당 블록이 실행된다.
CREATE OR REPLACE FUNCTION a RETURN VARCHAR2 IS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Function A!');
    RETURN 'Function A executed';
END a;
/

CREATE OR REPLACE FUNCTION b RETURN VARCHAR2 IS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Function B!');
    RETURN 'Function B executed';
END b;
/

-- 함수를 호출하는 예시
DECLARE --선언부
    result_a VARCHAR2(100);
    result_b VARCHAR2(100);
BEGIN   --실행부
    result_a := a();
    result_b := b();

    DBMS_OUTPUT.PUT_LINE('Result A: ' || result_a);
    DBMS_OUTPUT.PUT_LINE('Result B: ' || result_b);
END;    --종료
/

 

만약 패키지로 선언하여 호출할 경우

-- 패키지 헤드
CREATE OR REPLACE PACKAGE my_package IS
    FUNCTION a RETURN VARCHAR2;
    FUNCTION b RETURN VARCHAR2;
END my_package;
/

--패키지 본체
CREATE OR REPLACE PACKAGE BODY my_package IS
    FUNCTION a RETURN VARCHAR2 IS
    BEGIN
        DBMS_OUTPUT.PUT_LINE('Hello, World from Function A!');
        RETURN 'Function A executed';
    END a;

    FUNCTION b RETURN VARCHAR2 IS
    BEGIN
        DBMS_OUTPUT.PUT_LINE('Hello, World from Function B!');
        RETURN 'Function B executed';
    END b;
END my_package;
/ -- 패키지를 선언

-- 호출하는 곳
DECLARE
    result_a VARCHAR2(100);
    result_b VARCHAR2(100);
BEGIN
    result_a := my_package.a();
    result_b := my_package.b();

    DBMS_OUTPUT.PUT_LINE('Result A: ' || result_a);
    DBMS_OUTPUT.PUT_LINE('Result B: ' || result_b);
END;
/

 


PL/SQL 프로그램의 종류는 크게 Procedure, Function, Trigger로 나뉨

 

1. 프로시저 (Procedure)

정의: 특정 작업을 수행하는 명령어의 집합

특징

  • 반환 값X. 단 IN , OUT, INOUT변수로 나눠져있으며 OUT, INOUT은 값을 받아올 수 있다
  • 주로 반복적으로 사용되는 기능을 모듈화하여 관리하기 위해 사용
  • 호출 시 매개변수를 받을 수 있다

2. 함수 (Function)

정의: 특정 작업을 수행하고 결과를 반환하는 프로그램

특징

  • 반드시 반환 값을 가져야 하며, 반환형을 명시해야 함
  • SQL 문 내에서 사용할 수 있어, 결과를 계산하는 데 유용

3. 트리거 (Trigger)

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

특징

  • 주로 데이터 무결성을 유지하거나 특정 조건이 충족될 때 자동으로 동작하도록 설정
  • DML 이벤트에 반응하여 실행
  • 트리거는 명시적으로 호출되지 않고, 이벤트가 발생할 때 자동으로 실행

PL/SQL 주요 개념 정리

1. 블록 구조

  • 블록 단위 실행: PL/SQL 코드는 BEGIN과 END;로 구분된 블록 단위로 실행.
  • 슬래시(/): 블록의 마지막에 /를 입력하면 해당 블록이 실행

2. 변수와 상수

  • 변수 선언: 변수와 상수는 DECLARE 절에서 선언
  • 값 할당: BEGIN 섹션에서 변수값을 할당가능

3. 조건문과 반복문

  • 조건문 : IF문
  • 반복문 : LOOP, FOR, While.

4. 커서

  • 커서를 사용하여 여러 행을 검색하고 처리

5. SQL 사용

  • 지원되는 SQL 종류: PL/SQL에서 사용 가능한 SQL은 Query, DML(데이터 조작 언어), TCL(트랜잭션 제어 언어)
  • 동적 SQL: DDL(데이터 정의 언어) 명령어(CREATE, DROP, ALTER 등)와 DCL(데이터 제어 언어) 명령어(GRANT, REVOKE)는 PL/SQL에서 사용 가능하지만, 동적 SQL을 통해 실행
  • 정적SQL VS 동적SQL

6. SELECT 문

  • 결과 처리: PL/SQL의 SELECT 문은 결과를 PL/SQL 엔진으로 보냄
  • 변수 선언: 결과를 받을 변수를 DECLARE 절에서 선언해야 함
  • INTO 절: SELECT 문은 반드시 INTO 절을 사용하여 변수를 지정해야 하며, 한 개의 행만 검색해야 함
  • 행 없음 처리: 검색되는 행이 없으면 문제가 발생할 수 있으므로, 이를 염두에 두어야 함

7.  PL/SQL 프로그램의 종류

  • Procedure 
  • Function
  • Trigger 
728x90

댓글