PL/SQL (Procedural Language extension to SQL)
1. PL/SQL (Procedural Language extension to SQL)
- SQL만으로는 구현이 어렵거나 구현 불가능한 작업을 수행하기 위해 오라클에서 제공하는 프로그래밍 언어
- 변수, 조건, 반복 처리 등 다양한 기능을 사용 가능
2. 블록(Block)
- PL/SQL은 데이터베이스 관련 특정 작업을 수행하는 명령어와 실행에 필요한 여러 요소를 정의하는 명령어 등으로 구성된다
- 이러한 명령어들을 모아 둔 PL/SQL 프로그램의 기본 단위를 블록이라고 한다
3. 형식
DECLARE
선언부 - 변수, 상수, 커서 등을 선언
- 생략 가능
BEGIN
실행하는 명령어
EXCEPTION
예외처리 - 생략 가능
END;
DECLARE, BEGIN, EXCEPTION 에는 ;(세미콜론)을 사용하지 않는다
주석으로는 --, /* */ 를 사용한다
4. 예제
변수
1. 개념
- 데이터를 일시적으로 저장하는 요소
- 선언부에 작성
- 선언한 변수에 값을 할당하기 위해서는 := 사용
2. 형식
변수명 자료형 := 값 또는 표현식
3. 변수명
- 같은 블록 안에서는 중복될 수 없다
- 대소문자를 구별하지 않는다
- 이름은 문자로 시작해야 한다 (한글도 가능)
- 30 byte (영어는 30자, 한글은 15자)
- 영문자, 한글, 숫자, 특수문자 ($, #, _) 사용 가능
4. 변수의 자료형
- 변수에 저장할 데이터가 어떤 종류인지를 정하기 위해 사용된다
- 스칼라(scalar), 복합(composite), 참조(reference), LOB(Large OBject)로 구분된다
1) 스킬라형- 숫자, 문자열, 날짜 등과 같이 오라클에서 기본으로 정의해 놓은 자료형
NUMBER : 소수점을 포함할 수 있는 최대 38자리 숫자 데이터
CHAR / VARCHAR2
DATE
BOOLEAN (PL/SQL에서만 사용할 수 있는 논리 자료형, true, false, NULL을 포함)
2) 참조형- 오라클 데이터베이스에 존재하는 특정 테이블 열의 자료형이나 하나의 행 구조를 참조하는 자료형
열을 참조할 때는 %TYPE, 행을 참조할 때는 %ROWTYPE 을 사용한다
[형식]
변수명 테이블명.열이름%TYPE;
변수명 테이블명%ROWTYPE;
3) 복합형
여러 종류 및 개수의 데이터를 저장하기 위해 사용자가 직접 정의하는 자료형
컬렉션, 레코드로 구분된다
4) LOB형
대용량의 텍스트, 이미지, 동영상, 사운드 데이터 등 대용량 데이터를 저장하기 위한 자료형
BLOB, CLOB 등이 있다
5. 예제
상수
1. 개념
한번 저장한 값이 프로그램이 종료될 때까지 변하지를 않는다
2. 형식
변수명 CONSTANT 자료형 := 값 또는 표현식
변수 값 지정
1. 변수에 기본값 지정
형식
변수명 자료형 DEFAULT 값 또는 표현식
2. 변수에 NULL 값 막기
형식
변수명 자료형 NOT NULL := 값 또는 표현식
3. 예제
조건 제어문
1. IF문
- IF – THEN
- IF – THEN – ELSE
- IF – THEN – ELSIF
2. CASE문
1) 종류
- 단순 CASE문
비교 기준이 되는 변수 또는 식을 명시한다
- 검색 CASE문
비교기준을 명시하지 않고 각각의 WHEN 절에서 조건식을 명시한다
IF-THEN-ELSIF와 큰 차이가 없다
2) 형식
CASE 비교기준
WHEN 값1 THEN
명령어;
WHEN 값2 THEN
명령어;
ELSE
명령어;
END CASE;
오라클 SQL문에 사용하는 CASE 문은 조건에 따라 특정 결과값을 반환하는 것이면,
PL/SQL 문의 CASE 조건문은 조건에 따라 수행할 작업을 지정할 수 있다는 차이가 있다
SQL문의 CASE는 END로 종료되지만, PL/SQL 문의 CASE 조건문은 END CASE로 종료된다
3. 예제
반복 제어문
1. 기본 LOOP
LOOP
명령어;
END LOOP;
2. WHILE LOOP - 조건이 참이면 반복하고, 거짓이면 반복문을 벗어난다
WHILE 조건 LOOP
명령어;
END LOOP;
3. FOR LOOP
시작값부터 종료값까지 1씩 증가한다
역순으로 반복해도 시작..끝의 위치는 변하지 않는다
FOR i IN 시작값 .. 종료값 LOOP
명령어;
END LOOP;
FOR i IN REVERSE 시작값 .. 종료값 LOOP -- 역순 (0 .. 4 라고 쓰는 것은 변하지 않는다)
명령어;
END LOOP;
4. Cusor FOR LOOP
반복문을 중단 / 특정 반복 주기를 건너뛰는 명령어
- EXIT : 수행 중인 반복 종료
- EXIT WHEN : 반복 종료를 위한 조건을 지정
- CONTINUE : 수행 중인 반복의 현재 주기를 건너뛴다
- CONTINUE WHEN : 조건식을 지정하고 조건식을 만족하면 현재 반복 주기를 건너뛴다
5. 예제