공부/데이터베이스

[오라클로 배우는 데이터베이스 입문] 16. PL/SQL 기초

losey_J 2022. 4. 7. 01:58

1. PL/SQL 구조

- 블록이란? PL/SQL의 기본 단위

- PL/SQL: SQL만으로 구현이 어렵거나 구현 불가능한 작업을 수행하기 위해 오라클에서 제공하는 프로그래밍언어,변수, 조건 처리 등 다양한 기능 사용 가능

구성 키워드 필수/선택 설명
DECLARE(선언부) 선택 실행에 사용될 변수, 상수, 커서 등을 선언
BEGIN(실행부) 필수 조건문, 반복문, SELEC, DML, 함수 등을 정의
EXCEPTION(예외 처리부) 선택 PL/SQL 실행 도중 발생하는 오류(예외 상황)를 해결하는 문장 기술

※ 작성을 끝낸 PL/SQL은 END키워드로 종료 명시

○ 기본 형식
DECLARE
[실행에 필요한 여러 요소 선언];
BEGIN
[작업을 위해 실제 실행하는 명령어];
EXCEPTION
[PL/SQL 수행 도중 발생하는 오류 처리];
END;

- HELLO, PL/SQL 출력하기

-PL/SQL 주석

한 줄 주석 사용하기
두 줄 주석 사용하기

2. 변수와 상수

- 변수 선언과 값 대입하기

○ 변수: 데이터를 일시적으로 저장하는 요소로 이름과 저장할 자료형을 지정하여 선언부(DECLARE)에서 작성

○ 기본 변수 선언과 사용

변수 이름 자료형 := 값 또는 값이 도출되는 여러 표현식;
변수 이름 : 데이터를 저장할 변수 이름 지정
자료형: 선언한 변수에 저장할 데이터의 자료형 지정
 := : 선언한 변수에 값을 할당/ 오른쪽 값에 왼쪽 변수를 대입하겠다는 뜻/ 값을 넣지 않을 거면 생략 가능
값 또는 값이 도출되는 여러 표현식; : 변수에 저장할 첫 데이터 값 혹은 저장할 수 있는 값이 결과로 반환되는 표현식

변수 선언과 출력

○ 상수 정의하기
: 한번 저장하면 프로그램이 종료될 때까지 유지되는 저장요소를 상수라고 한다.

변수 이름 CONSTANT 자료형 := 값 또는 값이 도출되는 여러 표현식;
변수 이름 : 데이터를 저장할 변수 이름 지정
CONSTANT : 선언한 변수를 상수로 정의, 한번 저장한 값을 변하지 않음
자료형: 선언한 변수에 저장할 데이터의 자료형 지정
 := : 선언한 변수에 값을 할당/ 오른쪽 값에 왼쪽 변수를 대입하겠다는 뜻/ 값을 넣지 않을 거면 생략 가능
값 또는 값이 도출되는 여러 표현식; : 변수에 저장할 첫 데이터 값 혹은 저장할 수 있는 값이 결과로 반환되는 표현식

상수 정의하기

○ 변수의 기본값 지정하기

변수 이름 자료형 DEFAULT 값 또는 값이 도출되는 여러 표현식;
변수 이름 : 데이터를 저장할 변수 이름 지정
자료형: 선언한 변수에 저장할 데이터의 자료형 지정
DEFAULT : DEFALUT 키워드를 작성하여 변수의 기본값 명시
값 또는 값이 도출되는 여러 표현식; : 변수에 저장할 첫 데이터 값 혹은 저장할 수 있는 값이 결과로 반환되는 표현식

DEFAULT 정의하기

○ 변수에 NULL 값 저장 막기

선언한 변수에 특정 값을 할당하지 않으면 NULL값이 기본으로 할당되기 때문에 NOT NULL키워드를 사용한 변수는 반드시 선언과 동시에 특정 값을 지정해야 함

변수 이름 자료형 NOT NULL := 또는 DEFAULT 값 또는 값이 도출되는 여러 표현식;
변수 이름 : 데이터를 저장할 변수 이름 지정
자료형: 선언한 변수에 저장할 데이터의 자료형 지정
NOT NULL: NOT NULL 키워드를 작성하여 변수에 NULL이 저장되지 못하게 막음
 := 또는 DEFAULT 값 또는 값이 도출되는 여러 표현식; : 변수에 저장할 첫 데이터 값 혹은 저장할 수 있는 값이 결과로 반환되는 표현식/ NULL이 아닌 값을 할당해야 함/DEFAULT 변수 사용해서 기본값 설정해도 됨

NOT NULL 설정 후 값 대입 후 출력
NOT NULL 및 기본값 설정 후 출력

○ 변수 이름 정하기

식별자: 변수를 포함한 PL/SQL문에서 지정하는 객체 이름

1) 같은 블록 안에서 식별자는 고유해야 하며 중복될 수 없음
2) 대.소문자를 구별하지 않음
3) 테이블이름 붙이는 규칙과 같은 규칙을 따름
- 이름은 문자로 시작해야 한다
- 이름은 30byte이하여야 한다(영어는 30byte, 한글은 15byte)
- 이름은 영문자(한글 가능), 숫자(0-9), 특수문자($,#,_)사용할 수 있다
- SQL 키워드는 테이블 이름으로 사용할 수 없다(SELECT, FROM 등 사용불가)

- 변수의 자료형

○ 스칼라형 : 숫자, 문자열, 날짜 등과 같이 오라클에서 기본으로 정의해놓은 자료형으로 내부 구성요소가 없는 단일 값

분류 자료형 설명
숫자 NUMBER 소수점을 포함할 수 있는 최대 38자리 숫자 데이터
문자열 CHAR 최대32,767바이트 고정 길이 문자열 데이터
VARCHAR2 최대 32,767바이트 가변 길이 문자열 데이터
날짜 DATE 기원전 4712년 1월 1일부터 서기 9999년 12월 31일까지 날짜 데이터
논리 데이터 BOOLEAN PL/SQL에서만 사용할 수 있는 논리 자료형으로 true, false, NULL 포함

○ 참조형: 특정 테이블 열의 자료형이나 하나의 행 구조를 참조하는자료형

            / 열을 참조할 때 %TYPE, 행을 참조할때 %ROWTYPE 사용

변수 이름 테이블 이름.열이름%TYPE;
변수 이름 : 데이터가 저장될 변수의 이름을 저장
테이블 이름.열이름 : 특정 테이블에 속한 이름을 명시, 명시된 테이블의 열과 같은 크기의 자료형이 지정됨
%TYPE: 앞에서 지정한 테이블의 열과 같은 자료형 및 크기임을 명시. 이후 := 또는 DEFAULT 키워드를 사용해 값을 먼저 지정

참조형(열)의 변수에 대한 값을 대입 후 출력하기

변수 이름 테이블 이름%ROWTYPE;
변수 이름 : 데이터가 저장될 변수의 이름을 저장
테이블 이름 : 특정 테이블에 속한 이름을 명시, 명시된 테이블의 열과 같은 크기의 자료형이 지정됨
%TYPE과는 달리 저장할 값을 직접 지정할 수 있음

참조형(행)의 변수에 값을 대입한 후 출력하기

○ 복합형, LOB형

복합형 여러 종류 및 개수의 데이터를 저장하기 위해 사용자가 직접 정의하는 자료형
분류 자료형 설명
컬렉션 TABLE 한 가지 자료형의 데이터를 여러 개 저장(테이블의 열과 유사)
레코드 RECORD 여러 종류 자료형의 데이터를 저장(테이블의 행과 유사)
LOB형(LargeObject) 대용량 텍스트, 이미지, 동영상, 사운드 데이터 등 대용량 데이터를 저장하기 위한 자료형으로 BLOB,CLOB등이 있음

3. 조건 제어문

조건문: 특정 조건식을 통해 상황에 따라 실행할 내용을 달리하는 방식의 명령어

○ IF 조건문

종류 설명
IF-THEN 특정 조건을 만족하는 경우 조건 수행
IF-THEN-ELSE 특정 조건을 만족하는 경우와 반대 경우에 각각 지정한 작업 수행
IF-THEN-ELSIF 여러 조건에 따라 각각 지정한 작업 수행

○ IF-THEN

주어진 조건식의 결과 값이 true인 경우 작업 수행 false 또는 NULL인 경우 작업 수행하지 않고 다음 내용 실행

IF 조건식 THEN [ true 또는 false 판별이 가능한 조건식을 지정, 여러 연산자 및 함수 사용 가능
수행할 명령어;  [ 조건식의 결과 값이 true일 때 실행할 명령어 지정, 여러 명령어 지정가능
END IF;  [ IF 종료]

변수 입력값이 홀수인지 알아보기

○ IF-THEN-ELSE

주어진 조건식의 결과 값이 true인 경우 실행할 명령어와 true가 아닐 때 실행할 명령어 각각 지정

IF 조건식 THEN [ true 또는 false 판별이 가능한 조건식을 지정, 여러 연산자 및 함수 사용 가능
수행할 명령어;  [ 조건식의 결과 값이 true일 때 실행할 명령어 지정, 여러 명령어 지정가능
ELSE
수행할 명령어;  [조건식의 결과 값이 true가 아닌 경우 실행할 명령어 지정]
END IF;  [ IF 종료]

변수에 입력된 값이 홀수인지 짝수인지 알아볼 때

○ IF-THEN-ELSIF

여러 종류의 조건을 지정하여 각 조건을 만족하는 경우마다 다른 작업의 수행 지정

IF 조건식 THEN ---1
수행할 명령어; ---2
ELSIF 조건식---3
수행할 명령어; ---4
ELSIF---5
수행할 명령어---6
...
ELSE---7
수행할 명령어;---8
END IF; ---9
1~2 : 1조건식의 결과 값이 true면 2명령어 수행하고 false면 다음 ELSIF조건식으로 넘어감
3~6 : 3조건식의 결과 값이 true면 4명령어 수행하고 false면 다음 ELSIF 혹은 ELSE로 넘어감(5~6 동일)
7~8 : 7 위 IF,ELSIF 조건식의 결과 값이 어디서도 true가 나오지 않으면 명령어 수행
9 : IF문 종료

입력한 점수가 어느 학점인 지 출력하기

- CASE 조건문: IF문과 마찬가지로 조건식의 결과 값에 따라 여러가지 수행 작업 지정 가능

종류 설명
단순CASE문 비교 기준이 되는 조건의 값이 여러 가지일 때 해당 값만명시하여 작업 수행
검색CASE문 특정한 비교 기준 없이 여러 조건식을 나열하여 조건식에 맞는 작업 수행

○ 단순 CASE

CASE 비교기준----1
WHEN 값1 THEN----2
수행할 명령어;----3
WHEN 값2 THEN----4
수행할 명령어;----5
...
ELSE----6
수행할 명령어;----7
END CASE;----8
1) 여러 결과 값이 나올 수 있는 비교 기준 지정
2) 비교 기준의 결과 값이 값1과 일치하면 3)을 수행하고 나머지 명령어는 건너뜀, 4)~5)동일
6)~7) 6) 위의 WHEN값에 일치하는 값 못찾으면 마지막으로 ELSE에 지정한 7)작업 수행
8) CASE문 종료

CASE문을 통해 점수에 따른 학점 출력(단순 CASE)

○ 검색 CASE

CASE 
WHEN 조건식1 THEN----1
수행할 명령어;----2
WHEN 조건식2 THEN----3
수행할 명령어;----4
...
ELSE----5
수행할 명령어;----6
END CASE;
1)~4) 1)조건식1의 결과값이 true라면 2)작업 수행 나머지 건너뜀/3)~4) 동일
5)~6) 5) 위에 실행한 WHEN절의 조건식을 만족하는 경우가 없으면 6)작업 수행

 

CASE문을 통해 점수에 따른 학점 출력(검색 CASE)

4. 반복 제어문

반복문은 특정 작업을 반복하여 수행하고자 할 때 사용

PL/SQL이 제공하는 반복문
종류 설명
기본 LOOP 기본 반복문
WHILE LOOP 특정 조건식의 결과를 통해 반복 수행
FOR LOOP 반복 횟수를 정하여 반복 수행
Cursor FOR LOOP 커서를 활용한 반복 수행
반복 수행을 중단시키거나 특정 반복 주기를 건너뛰는 명령어
EXIT 수행중인 반복 종료
EXIT-WHEN 반복 종료를 위한 조건식 지정하고 만족하면 반복 종료
CONTINUE 수행중인 반복의 현재 주기를 건너뜀
CONTINUE-WHEN 특정 조건식을 지정하고 조건식을 만족하면 현재 반복 주기를 건너뜀

- 기본 LOOP : 반복의 종료 시점이나 조건식을 따로 명시하지않으므로 무한루프하게 됨/보통 EXIT명령어를 함께 사용하여 반복을 종료하도록 함

LOOP
반복 수행 작업;
END LOOP;

- WHILE LOOP: 반복 수행 여부를 결정하는 조건식을 먼저 지정 후 true일 때 반복 false일 때 끝냄

WHILE 조건식 LOOP
반복 수행 작업;
END LOOP;
※ 반복 수행되기 전에 조건식을 검사하므로 조건식의 결과 값에 따라 단 한 번도 반복 수행되지 않을 수 있음!

WHILE LOOP 사용하기

- FOR LOOP: 반복 횟수를 지정할 수 있는 반볻문으로 지정한 시작값부터 1씩 증가하여 종료값에 이를 때까지 반복수행

FOR i IN 시작 값 . . 종료 값 LOOP
반복 수행 작업;
END LOOP;
i : 반복 수행 중의 시작과 종료 값 사이의 현재 숫자가 저장되는 특수한 변수로 카운터라고 함
역순으로 반복하고 싶다면?
FOR i IN  REVERSE 시작 값 . . 종료 값 LOOP
반복 수행 작업;
END LOOP;

- CONTUNUE문, CONTINUE-WHEN문

: 반복수행중 CONTUNUE가 실행되면 현재 반복주기에 수행해야 하는 작업 건너뛰고 다음 반복주기로 넘어감

i의 나머지가 1일 때만 건너뛰는 CONTINUE WHEN문