컬렉션은 이전 절에서 학습한 레코드와 유사한 데이터 타입으로 레코드보다는 한층 더 향상되고 확장된 형태로,
객체지향 프로그램의 클래스와 유사하다.
컬렉션의 종류 : 연관배열,VARRAY,중첩테이블
※ 선언 방법
- 연관배열 : TYPE [연관배열명] IS TABLE OF [연관배열값타입] INDEX BY [인덱스타입];
- VARRAY : TYPE [VARRAY명] IS VARRAY(최대크기) OF 요소값_타입;
- 중첩테이블 : TYPE [중첩테이블명] IS TABLE OF [값타입];
- 연관배열
연관배열이란 키와 값으로 구성된 컬렉션으로, 키를 인덱스라고 부르기 때문에 연관 배열을 index-by 테이블이라고 한다. 연관배열은 키(인덱스)를 통해 값을 찾는 구조로 연관배열의 키는 유일키로 조회가 된다. 따라서 연관 배열은 키와 값이 한쌍을 이루어 연결되어있는 배열구조이므로 연관배열이라고 부르는것이다.
[TYPE 연관_배열명 IS TABLE OF 연관_배열_값타입 INDEX BY 인덱스타입]
위의 이미지와 같이 연관배열도 일종의 배열이며 배열을 구성하는 각 항목이 있는데 이를 요소(element)라고 한다.
연관 배열의 각 요소값은 "연관_배열_변수명(인덱스)" 형태로 접근할수 있다.
예제와 같이 연관배열은 인덱스 10과 '10에 대한 값'이라는 문자형데이터값이 한쌍으로 움직인다. 그리고 크기에 제한 없이 입력해서 사용할수 있으며 각 요소에 값을 입력할때마다 내부적으로는 숫자형이든 문자형이든 인덱스 값으로 정렬된다.
- VARRY
VARRY는 가변 길이 배열로서 연관배열과는 달리 크기에 제한이 있어 선언할때 크기(요소)를 지정하면 이보다 큰수로 요소를 만들수 없다. "변수명(인덱스)"형태로 해당 요소 값에 접근할수 있는데 연관 배열은 인덱스로 문자형이나 PLS_INTEGER값을 사용할수 있지만 VARRAY의 인덱스는 숫자만 가능하다.
[TYPE VARRAY명 IS VARRAY (최대크기) OR 요소값_타입;]
크기가 5인 VARRAY를 선언한 뒤 처음에는 생성자를 사용하여 3개의 요소에만 값을 할당했다. 이경우에는 4,5번째 요소의 값은 NULL이 된다. 초기화한 뒤에는 2번째 요소는 수정,4번째 요소에 값을 다시 할당한 뒤 출력하였다.
위와 같이 VARRAY는 각요소에 값을 채워 사용이 가능하지만 참조할 경우 인덱스 값의 최대 크기를 넘어 설수 없고, 요소 중간중간에 빈값이 존재할수 있다.(비어있으나 요소 자체가 존재하지 않는것은 아님.)
전화번호부처럼 키(인덱스) 값을 통해 요소 값에 접근을 하지만 VARRAY는 인덱스가 순번 형태이므로 연속적인 값을 저장할때 많이 사용한다.
- 중첩테이블
중첩 테이블은 크기에 제한이 없다는 점은 연관 배열과 같지만 숫자형 인덱스만 사용할수 있고 생성자를 사용하며 일반 테이블의 컬럼 타입으로 사용될수 있다는 점은 VARRAY와 같다.
VARRAY와 사용법이나 동작방식에 있어서 큰 차이가 없지만 중첩테이블은 VARRAY와 달리 최대 크기를 선언하지 않아 크기에 제한이 없고 동적으로 계속 늘어날수 있다.
'DB > ORACLE' 카테고리의 다른 글
32.[오라클]컬렉션 사용자정의 데이터타입 정리 (0) | 2025.01.25 |
---|---|
31.[오라클]컬렉션 메소드 (0) | 2025.01.25 |
29.[오라클]레코드 (0) | 2024.03.06 |
28.[오라클]커서 (0) | 2024.02.24 |
27.[오라클]트랜잭션 (0) | 2024.02.24 |