class
와 유사하게 생성자를 통해 초기화화며,COLLECTION
의 주요 유형으로는 3가지가 있다.key
: value
로 구성key
를 index
라고 부르기 때문에 index-by-table
이라고도 한다.key
는 unique
TYPE 연관배열명 IS TABLE OF 연관배열값타입 INDEX BY 인덱스타입;
DECLARE
TYPE emp_type IS TABLE OF VARCHAR2(50) INDEX BY NUMBER;
employees emp_type;
BEGIN
employees(1) := '조민수';
employees(2) := '이서진'; -- 값 추가
employees(2) := '꼬미'; -- 값 수정
employees.DELETE(3); -- 값 삭제
END;
TYPE 중첩테이블명 IS TABLE OF 값타입;
CREATE TYPE phone_number AS TABLE OF varchar2(20);
CREATE TABLE emp(
id NUMBER,
phones phone_number
) NESTED TABLE phones STORE as phone_table;
TYPE VARRAY명 IS VARRAY(최대크기) OF 요소타입;
CREATE TABLE hobbies_varray AS VARRAY(5) OF VARCHAR2(30);
CREATE TABLE person (
id NUMBER,
hobbies hobbies_varray
);
구분 | Associative Array | VARRAY | Nested Table |
---|---|---|---|
컬렉션 항목의 개수 | 미지정 | 지정 | 미지정 |
인덱스 유형 | 문자열 또는 정수 | 정수 | 정수 |
초기화되지 않은 상태 | Empty | NULL | NULL |
ADT(Abstract Data Type) 정의 | 불가능 | 가능 | 가능 |
유사한 일반 자료 구조 | 해시 테이블, 비순서 테이블 | 배열, 벡터 | 집합, 중복 허용 집합 |
:=
할당 연산 : 동일 타입 변수 간 복사 가능Associative Array
: 불가능Nested Table, VARRAY
: 제한된 범위 내에서 가능=, <>, !=, ~=, ^=
)DELETE
: 모든 항목 삭제DELETE(N)
: N번째 항목 삭제, DELETE(M, N)
: M번째에서 시작해서 N개 삭제)TRIM
: Nested Table, VARRAY
의 끝 부분 항목 삭제 (TRIM(N)
: 마지막 N개 삭제)EXTEND
: Nested Table, VARRAY
의 끝 부분에 항목(NULL
) 추가EXTEND(N)
: N개의 NULL
값 추가, EXTEND(N, I)
: I
번째 항목의 복사본 N개 추가)EXISTS
: Nested Table, VARRAY
에 지정 항목이 존재하면 TRUE
FIRST, LAST, COUNT
: 첫 번째 인덱스, 마지막 인덱스, 항목의 수 반환LIMIT
: VARRAY
가 가질 수 있는 항목의 최대 값 반환PRIOR
: 지정된 인덱스의 바로 앞 인덱스 반환 (FIRST
는 NULL
)NEXT
: 지정된 인덱스의 바로 뒤 인덱스 반환(LAST
는 NULL
)FOR LOOP
)를 통해 데이터를 간편하게 접근하고자 할 때BULK COLLECT
: TABLE → COLLECTIONSELECT id, name BULK COLLECT INTO ids, names FROM hr;
FORALL
: COLLECTION → TABLEFORALL I IN hr_ids.FIRST .. hr_ids.LAST
UPDATE hr SET salary = salary * 1.1 WHERE id = hr_ids(I);
PL/SQL 에서
BULK COLLECT
,FORALL
(배열 형태로 묶어서 처리)를 사용할 땐, PGA라는 별도의 메모리 영역 사용.
- 배열 크기가 너무 클 경우, PGA 영역을 과도하게 사용해 메모리 부족 현상을 일으킬 수 있음
→LIMIT
을 통해 적당한 배치 단위로 나누어 사용하는 것이 가장 현명함
COLLECTION
타입 선택Associative Array
: 인덱스 접근이 매우 빠름, 임이의 키 값 접근이 잦을 때 유용Nested Table
: 데이터 삽입/삭제가 빈번할 때, DB 테이블과의 연동에 적합VARRAY
: 길이 고정, 데이터 순서 유지가 중요할 때[참고자료]