데이터베이스 -14

김정현·2024년 5월 20일
0

데이터베이스

목록 보기
13/16

PL/SQL

(Oracle Procedual Language extension to SQL)

PL/SQL 구조

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

기본 형식

DECLARE
    [실행에 필요한 여러 요소 선언];  -변수,상수,커서
BEGIN
    [작업을 위해 실제 실행하는 명령어];
EXCEPTION
    [PL/SQL 수행 도중 발생하는 오류 처리];
END; 

변수와 상수

변수 선언

DECLARE
  • 자료형
    스칼라 : 단일 값 - 숫자, 문자열, 날짜, 논리형
    -NUMBER : 숫자
    -CHAR
    -VARCHAR2
    -DATE 날짜
    -BOOLEAN: 논리형

LOB : Large Object - CLOB, BLOB

참조형
-%TYPE : 특정 테이블의 컬럼의 자료형을 참조
-%ROWTYPE : 특정 테이블의 모든 컬럼들을 참조

복합형
-RECORD : 여러 변수와 자료형을 한꺼번에 선언하는 방식 / 레코드
-TABLE : 키 - 값 / 컬렉션

상수 선언

V_NUM CONSTANT NUMBER := 1000;



//BEGIN
//V_NUM := 2000; 
-> 변경 불가

조건 제어문

조건문

  • 1) IF-THEN
IF 조건식 THEN
	조건식이 참일때 실행
END IF;
  • 2) IF-THEN-ELSE
    ELSE 구문

  • 3) IF-THEN-ELSIF
    여러 조건에 따른 조건식

DECLARE
	V_SCORE NUMBER := 83;
BEGIN
	IF V_SCORE >= 90 THEN
		DBMS_OUTPUT.PUT_LINE('A학점');
	ELSIF V_SCORE >= 80 THEN
		DBMS_OUTPUT.PUT_LINE('B학점');
	ELSIF V_SCORE >= 70 THEN
		DBMS_OUTPUT.PUT_LINE('C학점');
	ELSIF V_SCORE >= 60 THEN
		DBMS_OUTPUT.PUT_LINE('D학점');
	ELSE 
		DBMS_OUTPUT.PUT_LINE('F학점');
	END IF;

END;

CASE 조건문

CASE 
	WHEN 조건,값 THEN...
  • 1) 단순 CASE : 값의 일치여부
    -CASE쪽에 변수가 온다.
DECLARE 
	V_RANK NUMBER := 3;

BEGIN
	CASE V_RANK
		WHEN 1 THEN DBMS_OUTPUT.PUT_LINE('금메달');
		WHEN 2 THEN DBMS_OUTPUT.PUT_LINE('은메달');
		WHEN 3 THEN DBMS_OUTPUT.PUT_LINE('동메달');
		ELSE DBMS_OUTPUT.PUT_LINE('NO메달');
	END CASE;
END;
  • 2) 검색 CASE
    -CASE쪽에는 변수 X, WHEN 조건식 THEN 조건이 참일때 실행되는 부분
DECLARE
	V_SCORE NUMBER := 75;
BEGIN
	CASE 
		WHEN V_SCORE >= 90 THEN DBMS_OUTPUT.PUT_LINE('A학점');
		WHEN V_SCORE >= 80 THEN DBMS_OUTPUT.PUT_LINE('B학점');
		WHEN V_SCORE >= 70 THEN DBMS_OUTPUT.PUT_LINE('C학점');
		WHEN V_SCORE >= 60 THEN DBMS_OUTPUT.PUT_LINE('D학점');		
		ELSE DBMS_OUTPUT.PUT_LINE('F학점');
	END CASE;
END;

반복 제어문

반복문

  • 1) 기본 LOOP : 반복 중단 조건이 필수, EXIT, EXIT-WHEN 조건식
LOOP

END LOOP;

EX)

DECLARE
	V_NUM NUMBER := 1;
BEGIN
	LOOP
		DBMS_OUTPUT.PUT_LINE('V_NUM : ' || V_NUM);
		V_NUM := V_NUM + 1;
		
--		IF V_NUM > 4 THEN EXIT;
--		END IF;

		EXIT WHEN V_NUM > 4;
	END LOOP;	
END;
  • 2) WHILE LOOP
WHILE 조건식 LOOP
	조건이 참일때 반복되는 구간
END WHILE;

EX)

DECLARE
	V_NUM NUMBER := 1;
BEGIN
	WHILE V_NUM <= 4 LOOP
		DBMS_OUTPUT.PUT_LINE('V_NUM : ' || V_NUM);
		V_NUM := V_NUM + 1;
	END LOOP;
	
END;
  • 3) FOR LOOP
FOR i IN 0..4 LOOP  // i -> 0 ~ 4

END FOR;

EX)

BEGIN
	FOR i IN 1..4 LOOP
		DBMS_OUTPUT.PUT_LINE('i : ' || i);
	END LOOP;	
END;

REVERSE 키워드

FOR i IN REVERSE 0..4 LOOP  // i -> 0 ~ 4

END FOR;
  • 4)Cursor For LOOP

반복 중단 명령어 종류

  1. EXIT
  2. EXIT-WHEN
  3. CONTINUE
DECLARE
	V_TOTAL NUMBER := 0;
BEGIN
	FOR I IN 1..100 LOOP	
		CONTINUE WHEN MOD(i, 2) = 0;
		
		V_TOTAL := V_TOTAL + i;
	END LOOP;
	DBMS_OUTPUT.PUT_LINE('합계 : ' || V_TOTAL);
END;
  1. CONTINUE-WHEN

0개의 댓글