PL/SQL이란?

PL/SQL이란 오라클 자체에 내장되어 있는 절차적 언어로 SQL 문장 내에서 변수의 정의, 조건 처리(IF), 반복 처리(LOOP, FOR, WHILE) 등을 지원한다. 다수의 SQL문을 한 번에 실행이 가능하다.

 

PL/SQL에 대해 알아보자

 


 

PL/SQL의 구조

  • 선언부(DECLAER SECTION)
    • DECLARE로 시작, 변수나 상수를 선언 및 초기화하는 부분이다.
  • 실행부(EXECUTABLE SECTION)
    • BEGIN으로 시작, SQL문, 제어문(조건, 반복문) 등의 로직을 기술하는 부분이다.
  • 예외 처리부(EXCEPTION SECTION)
    • EXCEPTION로 시작, 예외 발생 시 해결하기 위한 구문을 기술하는 부분이다.

 


 

PL/SQL 선언부

  • 변수 및 상수를 선언해 놓는 공간이다. 선언과 동시에 초기화도 가능.
  • 변수 및 상수의 종류
    • 일반 타입 변수
    • 레퍼런스 타입 변수
    • ROW 타입 변수

 

 

 

1. 일반 타입 변수

일반 타입 변수의 선언 및 초기화
            [문법]
                변수명 [CONSTANT] 자료형(크기) [:= 값];

 

출력기능 활성화
-- 출력기능 활성화
SET SERVEROUTPUT ON;

 

이 코드를 실행해놓자.

 

 

 

2. 레퍼런스 타입 변수

  • 해당하는 테이블의 칼럼에 데이터 타입을 참조해서 그 타입으로 변수를 지정한다.

 

레퍼런스 타입 변수 선언 및 초기화
            [문법]
                변수명 테이블명%ROWTYPE;

 

 

 

3. ROW 타입 변수

  • 하나의 테이블의 여러 칼럼의 값을 한꺼번에 저장할 수 있는 변수를 의미한다.
  • 모든 칼럼을 조회하는 경우에 사용하기 편리하다.

 

ROW 타입 변수 선언 및 초기화
            [문법]
                변수명 테이블명%ROWTYPE;

 


 

PL/SQL 실행부

  • 변수 및 상수를 선언해 놓는 공간이다.
  • 선언과 동시에 초기화가 가능하다.
  • 변수 및 상수는 일반 타입 변수, 레퍼런스 타입 변수, ROW 타입 변수로 선언해서 사용할 수 있다.

 

1. 선택문

1-1) 단일 IF 문법
            [문법]
                IF 조건식 THEN
                    실행 문장
                END IF;

 

1-2) IF ~ ELSE 구문
          [문법]
            IF 조건식 THEN
                실행 문장
            ELSE 
                실행 문장
            END IF;

 

1-3) IF ~ ELSIF ~ ELSE 구문
          [문법]
            IF 조건식 THEN
                실행 문장
            ELSIF 조건식 THEN
                실행 문장
            ...
            [ELSE
                실행 문장]
            END IF;

 

1-4) CASE 구문
          [문법]
            CASE 비교 대상
                 WHEN 비교값1 THEN 결과값1
                 WHEN 비교값2 THEN 결과값2
                 ...
                 [ELSE 결과값]
            END;

 

2. 반복문

BASIC LOOP
            [문법]
                LOOP
                    반복적으로 실행시킬 구문
                    
                    [반복문을 빠져나갈 조건문 작성]
                        1) IF 조건식 THEN 
                              EXIT;
                           END IF
                           
                        2) EXIT WHEN 조건식;
                END LOOP;

 

WHILE LOOP
          [문법]
            WHILE 조건식
            LOOP
                반복적으로 실행할 구문;
            END LOOP;

 

FOR LOOP
          [문법]
            FOR 변수 IN [REVERSE] 초기값..최종값
            LOOP
                반복적으로 실행할 구문;
            END LOOP;

 

예제

구구단(2 ~ 9단)  출력 (짝수단만 출력)
BEGIN
    FOR DAN IN 2..9
    LOOP
        IF (MOD(DAN, 2) = 0) THEN
            FOR SU IN 1..9
            LOOP        
                DBMS_OUTPUT.PUT_LINE(DAN || ' X ' || SU || ' = ' || DAN * SU );
            END LOOP;
            
            DBMS_OUTPUT.PUT_LINE('');
        END IF;
    END LOOP;
END;

 

반복문(FOR 구문)을 이용한 데이터 삽입
CREATE TABLE TEST (
    NUM NUMBER,
    CREATE_DATE DATE
);

 

실습을 위한 TEST 테이블을 먼저 생성한다.

-- TEST 테이블에 10개의 행을 INSERT하는 PL/SQL 작성
BEGIN
    FOR NUM IN 1..10
    LOOP
        INSERT INTO TEST VALUES(NUM, SYSDATE);
        
        IF (MOD(NUM, 2) = 0) THEN
            COMMIT;
        ELSE
            ROLLBACK;
        END IF;    
    END LOOP;
END;

 


 

PL/SQL 예외처리부

예외란 실행 중 발생하는 오류를 뜻하고 PL/SQL 문에서 발생한 예외를 예외처리부에서 코드로 처리가 가능하다.

 

문법
        [문법]
            DECLARE
                ...
            BEGIN
                ...
            EXCEPTION
                WHEN 예외명 1 THEN 예외처리구문 1;
                WHEN 예외명 2 THEN 예외처리구문 2;
                ...
                WHEN OTHERS THEN 예외처리구문;

 

오라클에서 미리 정의되어 있는 예

  • NO_DATA_FOUND
    • SELECT 문의 수행 결과가 한 행도 없을 경우에 발생한다.
  • TOO_MANY_ROWS
    • 한 행이 리턴되어야 하는데 SELECT 문에서 여러 개의 행을 리턴할 때 발생한다.
  • ZERO_DIVIDE
    • 숫자를 0으로 나눌 때 발생한다.
  • DUP_VAL_ON_INDEX
    • UNIQUE 제약 조건을 가진 컬럼에 중복된 데이터가 INSERT 될 때 발생한다.

 

'DB > Oracle' 카테고리의 다른 글

[DB/Oracle] DQL이란?  (2) 2024.04.02
[DB/Oracle] PROCEDURE와 FUNCTION  (1) 2024.04.02
[DB/Oracle] VIEW  (2) 2024.03.28
[DB/Oracle] DDL이란?  (2) 2024.03.27
[DB/Oracle] SQL 종류  (3) 2024.03.27

+ Recent posts