PLSQL - Collection
Collection
- Record 와 같은 복합형 데이터 타입이며, 동시에 여러 로우에 해당되는 데이터를 가질 수 있다.
- 객체지향언어의 클래스와 유사하다. 클래스처럼 생성자를 통해 초기화를 할 수 있고 (연관배열은 불가능), built-in 함수와 procedure로 구성된 collection 메소드를 제공한다.
- method를 통해서 collection 내 값을 수정,삭제할 수 있다.
Collection의 종류
- Oracle에서 제공하는 Collection 타입은 구조에 따라 3가지로 나뉜다.
- 연관 배열 (Associative Array)
- VARRAY (Variable-Size Array)
- 중첩 테이블
연관 배열 (Associative Array)
키-값 pair로 구성된 Collection. Key를 인덱스라고도 부르기 떄문에 index-by 테이블이라고도 한다.
연관 배열 선언 문법
1 | TYPE 연관배열명 IS TABLE OF 값타입 INDEX BY 인덱스(키)타입; |
주의할점은 값타입은 어떠한 타입도 올 수 있지만 , 인덱스(키) 타입은 문자형,PLS_INTEGER 타입만 올 수 있다.
1 | DECLARE |
- 위 예제에서 보다시피 연관 배열의 요소값은 연관배열변수명(키) 형태로 접근 가능하다.
- 연관배열에 값을 입력할때 마다 내부적으로는 인덱스 값을 기준으로 정렬된다.
VARRY (Variable Size Array , 가변 길이 배열)
- 연관 배열과 다르게 크기에 제한이 존재한다.
- 키 값을 개발자가 명시하는게 아니라 DB AUTO_INCREMENT처럼 자동으로 순번이 증가한다.
- VARRY 선언 문법
1 | TYPE VARRY 명 IS VARRAY(최대요소개수) OF 값타입; -- ex) VARRY(10) : 최대 요소를 10개 가지는 가변 길이 배열 |
만약 최대요수 개수보다 많은 요소를 선언하려고 하면 ORA-06532 오류가 터진다.
1 | 오류 보고 - |
사용 예시를 보면 다음과 같다. 먼저 연관배열과 다르게 생성자로 VARRY 가변 길이 배열을 초기화하고 , 변수명(인덱스) 형태로 값을 조회 또는 값을 저장 할 수 있다.
1 |
|
중첩 테이블 (Nested Table)
요소 제한이 없으나 , 숫자형 인덱스만 사용 가능하다.
생성자를 사용하며 , 일반 테이블의 칼럼 타입으로 사용될 수 있다.
중첩 테이블 선언 문법
1 | TYPE 중첩테이블명 IS TABLE OF 값타입; |
1 | DECLARE |