PLSQL에서는 3가지 형태의 Collection type을 지원한다.
- Associative array : 일반적으로 사용하는 table이라고 생각(key, value를 이용해 table에 접근)
- VARRAY : 크기가 정해진 배열 타입
- Nested table : 크기가 정해지지 않은 배열 타입
Associative array
- Key-value 쌍으로 구성되며 각 키는 Unique Index로 배열처럼 연관된 값을 변수이름(인덱스) 형태로 접근한다. 즉 인덱스는 Integer or String 타입이 가능하며 키값으로 정렬된다.
- 1차원 배열과 같은 데이터 타입으로 크기가 동적으로 늘어난다.
- 먼저 TYPE을 정의 후 변수의 데이터 타입으로 할당하여 사용한다.
VARRAY
- 요소의 수가 0부터 가변적으로 변하는 배열처럼 쓰이는 타입으로 Nested Type과 다른점은 최대사이즈를 정한다는 것, 즉 크기가 정해진다는 것이다.
- 프로그래밍 언어의 크기가 정해진 배열과 유사하다.
Nested table
- 위의 Associative array 방식에서 index by가 빠진 형태로 특별한 순서없이 행의 수(최대크기)도 정해지지 않은 칼럼처럼 사용되는 타입니다.
- 시작 인덱스는 1이며 변수이름(인덱스) 형태로 접근 가능하다.
PLSQL에서는 3가지 형태의 Record type을 지원한다.
- User-Defined records : 사용자가 서로 다른 필드로 레코드 구조를 정의
- Table-Based records : %rowtype 이용
- Cursor-Based records : %rowtype 이용
Cursor
Cursor란, SQL문을 처리한 결과 집합을 가리키는 일종의 포인터이다.
이 결과 집합은 오라클 서버 프로세스 내부의 Private SQL Area라는 메모리 영역에 저장되는데, 여기서 유의해야 할 점은 커서는 클라이언트 측 프로세스에서 가리키고 있다는 점이다.
Private SQL Area는 특정 쿼리에 대한 결과를 저장하면서 캐싱 하는 역할을 하는데, 한 세션 안에서 같은 쿼리를 반복적으로 호출한다면, 저장되어 있는 결과 집합을 반환하면서 자원 낭비를 최소화한다.

SELECT문으로 특정 테이블에 있는 데이터를 조회할 때, 이 EMPLOYEE라는 테이블의 조회된 값들이 Private SQL Area에 저장되고, 커서로 이영역을 가리킨다.
이후 만약 이 영역을 사용할 경우 Cursor를 이용해 호출하면되기 때문에 자원 낭비를 최소화할 수 있다.
커서의 종류
- 암(묵)시적 커서(Implicit cursor) : 오라클 내부에서 자동으로 생성되어 사용하며 PLSQL블록안에서 실행하는 SQL문장 실행시 자동으로 만들어져 생성되는 커서
- 명시적 커서(Explicit cursor) : 사용자가 직접 정의해서 사용하는 커서
PLSQL에서 IF 조건문
- IF-THEN : 특정 조건을 만족하는 경우 작업 수행
- IF-THEN-ELSE : 특정 조건을 만족하는 경우와 그렇지 않은 경우의 작업 수행
- IF-THEN-ELSEIF : 위의 두 가지 이외의 여러 조건에 따라 각각 지정한 작업 수행
PLSQL에서 LOOP

반복문과 관련된 명령어
- EXIT : 수행 중인 반복 종료
- EXIT-WHEN : 조건식을 만족하면 반복 종료
- CONTINUE : 수행 중인 반복의 현재 주기를 건너뜀
- CONTINUE-WHEN : 조건식을 만족하면 수행 중인 반복의 현재 주기를 건너뜀
'Develop > DBMS' 카테고리의 다른 글
| PL/SQL기초2 (0) | 2022.04.14 |
|---|---|
| PL/SQL기초1 (0) | 2022.04.13 |
| Oracle 문법, 쿼리, 예제 (0) | 2022.04.01 |