조합 변수(Composite Variables)

2024. 9. 9. 02:07DB/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;


    

 레코드와 컬렉션의 차이점
레코드는 여러 개의 필드를 하나의 그룹으로 묶는 개념이며, 각 필드는 서로 다른 데이터 타입을 가질 수 있다. 컬렉션은 동일한 데이터 타입의 데이터를 여러 개 저장할 수 있는 배열 구조이다.

 
 

 

 

반응형