컬렉션의 종류
오라클에서 제공하는 컬렉션 타입은 그 구조에 따라 연관 배열, VARRAY, 중첩 테이블, 이렇게 3가지 유형이 존재하는데, 지금부터 하나씩 살펴보자.
① 연관 배열
연관 배열Associative Array 이란 키와 값으로 구성된 컬렉션으로, 키를 인덱스라고도 부르기 때문에 연관 배열을 Index-by 테이블이라고도 한다. 연관 배열은 일상 생활에서 흔히 볼 수 있는 전화번호부와 유사한 구조다. 누군가의 전화번호를 찾을 때 사람 이름으로 검색하듯이, 연관 배열은 키(인덱스)를 통해 값을 찾는 구조다. 다만, 전화번호부의 경우에는 동명이인이 있을 수 있지만, 연관 배열의 키는 유일한 키다. 따라서 연관 배열은 키-값이 한 쌍을 이루어 연결되어 있는 배열 구조이며, 이런 이유로 연관 배열이라고 부르는 것이다.
컬렉션의 선언은 레코드 타입 선언과 유사한데, 연관 배열은 다음과 같이 선언한다.
TYPE 연관_배열명 IS TABLE OF 연관_배열_값타입 INDEX BY 인덱스타입;
연관_배열_값타입은 어떤 데이터 타입이든 올 수 있지만, 인덱스 타입은 문자형이나 PLS_INTEGER 타입만 올 수 있다. 연관 배열도 레코드처럼 먼저 타입을 선언하고 해당 타입의 변수를 선언해 사용한다. 간단한 연관 배열 예제를 살펴 보자.
입력
DECLARE
-- 숫자-문자 쌍의 연관 배열 선언
TYPE av_type IS TABLE OF VARCHAR2(40)
INDEX BY PLS_INTEGER;
-- 연관 배열 변수 선언
vav_test av_type;
BEGIN
-- 연관 배열에 값 할당
vav_test(10) := '10에 대한 값'; -- 키는 10, 값은 '10에 대한 값'
vav_test(20) := '20에 대한 값';
--연관 배열 값 출력
DBMS_OUTPUT.PUT_LINE(vav_test(10));
DBMS_OUTPUT.PUT_LINE(vav_test(20));
END;
결과
10에 대한 값
20에 대한 값
연관 배열도 일종의 배열이며 배열을 구성하는 각 항목이 있는데 이를 요소element 라고 한다(레코드의 필드에 해당한다).연관 배열의 각 요소 값은 “연관_배열_변수명(인덱스)” 형태로 접근할 수 있다. 앞의 예제를 보면 알 수 있듯이, 인덱스 10과 ‘10에 대한 값’이라는 문자형 데이터 값이 한 쌍으로 움직인다. 앞에서 컬렉션도 클래스처럼 생성자를 통해 초기화할 수 있다고 했는데, 3가지 타입 중 유일하게 연관 배열만 생성자를 사용할 수 없다. 또한 연관 배열은 그 크기에 제한 없이 입력해서 사용할 수 있으며, 각 요소에 값을 입력할 때마다 내부적으로는 숫자형이든 문자형이든 인덱스 값으로 정렬된다.