2024. 9. 9. 02:07ㆍDB/PLSQL
조합 변수(Composite Variables)는 여러 데이터를 하나의 구조로 묶어서 저장할 수 있는 변수이며 한 변수가 여러 필드를 포함할 수 있는 구조를 갖추고 있어 데이터 구조를 효율적으로 관리할 수 있다. Oracle PL/SQL에서 대표적인 조합 변수의 종류는 레코드(Record) 와 컬렉션(Collection)이다.
레코드(Record)
레코드는 여러 개의 필드를 하나의 그룹으로 묶어서 사용할 수 있는 조합 변수이다. 각 필드는 서로 다른 데이터 타입을 가질 수 있으며, 개별 필드에 접근하여 값을 할당하거나 읽을 수 있다.
- 사용자 정의 레코드 : 사용자가 직접 정의한 레코드 타입이다. 사용자 정의 레코드는 TYPE 키워드를 사용하여 선언하고, 여러 필드를 포함할 수 있다.
DECLARE
TYPE emp_rec IS RECORD (
emp_id NUMBER,
emp_name VARCHAR2(50),
hire_date DATE
);
employee emp_rec;
BEGIN
employee.emp_id := 1001;
employee.emp_name := 'John Doe';
employee.hire_date := SYSDATE;
END;
- %ROWTYPE: 테이블이나 뷰의 한 행을 나타내는 레코드 타입이다. 테이블의 구조를 그대로 반영하므로, 해당 테이블의 컬럼이 변경되면 자동으로 레코드도 변경된다.
DECLARE
emp_row emp%ROWTYPE;
BEGIN
SELECT * INTO emp_row FROM emp WHERE emp_id = 1001;
END;
컬렉션(Collection)
컬렉션은 동일한 데이터 타입의 데이터를 여러 개 저장할 수 있는 조합 변수이다. 컬렉션의 각 요소는 인덱스를 통해 접근할 수 있으며, 배열처럼 사용할 수 있다. 컬렉션에는 세 가지 유형이 있다.
- 연관 배열(Associative Array): 키-값 쌍을 기반으로 데이터를 저장하는 컬렉션이다. 배열의 인덱스가 정수 또는 문자열이 될 수 있으며, 동적으로 크기가 조정된다.
DECLARE
TYPE arr_type IS TABLE OF VARCHAR2(50) INDEX BY PLS_INTEGER;
arr arr_type;
BEGIN
arr(1) := 'John';
arr(2) := 'Jane';
END;
- 중첩 테이블(Nested Table): 테이블처럼 데이터를 다룰 수 있는 컬렉션이다. 배열의 크기가 가변적이며, 중복된 데이터를 저장할 수 있으며 중첩 테이블은 순서를 유지하지 않는다.
DECLARE
TYPE nested_table IS TABLE OF VARCHAR2(50);
names nested_table;
BEGIN
names := nested_table('John', 'Jane', 'Doe');
END;
- VARRAY(Variable-size Array): 고정된 크기의 배열이다. 컬렉션의 크기를 미리 정의해야 하며, 배열의 순서를 유지한며 컬렉션에 저장할 수 있는 요소의 수가 제한된다.
DECLARE
TYPE varray_type IS VARRAY(5) OF VARCHAR2(50);
varr varray_type := varray_type('John', 'Jane');
BEGIN
varr.EXTEND(1); -- 배열 크기 확장
varr(3) := 'Doe';
END;
레코드와 컬렉션의 차이점
레코드는 여러 개의 필드를 하나의 그룹으로 묶는 개념이며, 각 필드는 서로 다른 데이터 타입을 가질 수 있다. 컬렉션은 동일한 데이터 타입의 데이터를 여러 개 저장할 수 있는 배열 구조이다.
'DBMS > PLSQL' 카테고리의 다른 글
sys_refcursor (0) | 2024.09.09 |
---|---|
WHERE CURRENT OF 절 | 명시적 커서 (0) | 2024.09.08 |
특정 부서 번호를 입력받아 삭제 (1) | 2024.06.03 |
부서 ID의 최대값 조회 및 새로운 부서 ID 생성 (0) | 2024.06.03 |
스키마 테이블 모두 삭제 (0) | 2024.05.30 |