데이터베이스/Oracle

Oracle, PL/SQL 이란?

greenyellow-s 2024. 8. 21. 18:54
PL/SQL

 

Procedural Language extension to SQL

 

SQL만으로는 구형이 어렵거나 구현 불가능한 작업을 수행하기 위해 오라클에서 제공하는 프로그래밍 언어이다.

변수, 조건, 반복 처리 등 다양한 기능을 사용할 수 있다.

 

Block 이란?

 

PL/SQL은 데이터베이스 관련 특정 작업을 수행하는 명령어와 실행에 필요한 여러 요소를 정의하는 명령어 등으로 구성된다. 이러한 명령어들을 모아 둔 PL/SQL 프로그램의 기본 단위를 블록이라고 한다.

 

[형식]

DECLARE

        선언부 - 변수, 상수, 커서 등을 선언 (생략가능)

BEGIN

        실행하는 명령어

EXCEPTION

        예외처리(생략가능)

END;

 

DECLARE, BEGIN, EXCEPTION에는 ;(세미콜론)을 사용하지 않는다.

SET SERVEROUTPUT ON; -- PL/SQL 결과를 화면에 출력
DECLARE

BEGIN
	DBMS_OUTPUT.PUT_LINE('HELLO PL/SQL');
END;
/ -- CMD 창에서 실행할 때

[출력화면]

HELLO PL/SQL

 

/ 를 마지막에 넣어줘야지 아래에서 다른 구문을 실행할 때 같이 되지 않는다.

 

변수

 

데이터를 일시적으로 저장하는 요소

선언부(CELARE - BEGIN)에서 작성

 

변수에 값 할당하는 방법

변수명 := 값

변수  
스킬라형 숫자, 문자열, 날짜 등과 같이 오라클에서 기본으로 정의해 놓은 자료형

NUMBER : 소수점을 포함할 수 있는 최대 38자리 숫자 데이터
CHAR / VARCHAR2
DATE
BOOLEAN
참조형 오라클 데이터베이스에 존재하는 특정 데이터 열의 자료형이나 하나의 행 구조를 참조하는 자료형

열 참조 : %TYPE
행 참조 : %ROWTYPE

변수명 테이블명.열이름%TYPE
변수명 테이블명.%ROWTYPE
복합형 여러 종류 및 개수의 데이터를 저장하기 위해 사용자가 직접 정의하는 자료형

컬렉션, 레코드로 구분한다.
LOB형 대용량의 텍스트, 이미지, 동영상, 사운드 데이터 등 대용량 데이터를 저장하기 위한 자료형

BLOB, CLOB 등

 

예시

DECLARE
	NAME VARCHAR2(10);
	AGE TEST_TABLE.NUMBER%TYPE := 5;
BEGIN
	NAME := '홍길동';
	DBMS_OUTPUT.PUT_LINE('NAME : ' || NAME);
	DBMS_OUTPUT.PUT_LINE('AGE : ' || AGE);
END;

 

NAME은 VARCHAR(10) 변수형으로 선언.

AGE는 TEST_TABLE테이블에 NUMBER라는 컬럼의 변수형과 동일하게 적용하고 5의 값을 저장

 

DBMS_OUTPUT.PUT_LINE() : PL/SQL에서 화면에 출력하는 구문

 

  형식 의미
상수 변수명 CONSTANT 자료형 := 값 또는 표현식  한번 저장한 값이 프로그램이 종료될 때까지 변하지 않는다.
변수의 기본값 지정 변수명 자료형 DEFAULT 값 또는 표현식 해당 값 또는 표현식을 기본값으로 지정한다.
변수에 NULL 값 막기 변수명 자료형 NOT NULL := 값 또는 표현식 해당 변수에는 NULL값이 들어오지 못하게 막는다.

 


조건 제어문

 

조건 제어문 형식  
IF문 IF - THEN - END IF;

IF - THEN - ELSE - END IF;

IF - THEN - ELSIF - END IF;
 
CASE문 CASE 비교기준
     WHEN 값1 THEN
            명령어;
      WHEN 값2 THEN
            명령어;
      ELSE
            명령어;
END CASE;
CASE
      WHEN 조건1 THEN
            명령어;
      WHEN 조건2 THEN
            명령어;
      ELSE
            명령어;
END CASE;

 

DECLARE
NUM NUMBER := 16;
BEGIN
	IF NUM <= 0 THEN
		DBMS_OUTPUT.PUT_LINE(NUM || ' : 음수');
	ELSIF MOD(NUM, 2)=0 THEN
		DBMS_OUTPUT.PUT_LINE(NUM || ' : 짝수');
	ELSE
   		DBMS_OUTPUT.PUT_LINE(NUM || ' : 홀수');
	END IF
END;
DECLAER
	SCORE NUMBER := 85;
	GRADE VARCHAR2(10);
BEGIN
	CASE
		WHEN SCORE >= 90 THEN GRAGE := 'A';
		WHEN SCORE >= 80 THEN GRAGE := 'B';
		WHEN SCORE >= 70 THEN GRAGE := 'C';
		WHEN SCORE >= 60 THEN GRAGE := 'D';
		ELSE GRAGE := 'F';
	END CASE;
END;

 

 

반복 제어문

반복 제어문 형식  
기본 LOOP LOOP
     명령어;
END LOOP;
 
WHILE LOOP WHILE 조건 LOOP
     명령어;
END LOOP;
 
FOR LOOP 기본
FOR i IN 시작값 .. 종료값 LOOP
     명령어;
END LOOP;

역순( i -- )
FOR i IN REVERSE 시작값 .. 종료값 LOOP
     명령어;
END LOOP;
역순으로 출력할 때, REVERSE
시작..끝 위치는 변하지 않는다
CUSOR FOR LOOP EXIT
EXIT THEN
CONTINUE
CONTINUE 
반복문을 중단 / 특정 반복 주기를 건너뛰는 명령어