■ Data Skill ■/PL-SQL

PL/SQL (18) - Collections (VARRAY)

한길(One Way) 2023. 3. 18.

VARRAY

- 가변 크기 배열은 최대 크기를 고정시킬 수 있다는 것을 제외하면 중첩테이블과 유사하다.

- VARRAY 생성시 최대 크기를 설정하기 때문에, 항목을 추가할수록 여유공간이 없어지게 된다.

- 크기를 처음에 정해버리기 때문에 한번 추가된 항목은 삭제할 수 없다.

- 각각의 배열 요소가 순서대로 유지된다.

 

 

생성자

- varray를 사용하기 전에 생성자(Constructor)를 호출하여 초기화 시켜야한다.

- 생성자에는 파라미터를 전달할 수 있으며, 이느 배열 요소를 생성하는데 사용된다.

- 파라미터를 전달하지 않으면 빈 배열을 생성한다.

 

 

배열의 선언과 초기화

TYPE 형이름 IS VARRAY(크기) OF 항목형 [NOT NULL];

- 크기 : 배열이 가질 요소의 개수

- 항목형 : 배열의 요소에 대한 데이터형

 

 
DECLARE
    TYPE dept_array IS VARRAY(100) OF VARCHAR2(30);
    -- 배열 형 선언, 배열의 요소 개수는 100개. 요소의 데이터형은 VARCHAR2(30)
 
    depts dept_array; -- 배열 변수 선언
    inx1 PLS_INTEGER;
 
BEGIN
    depts : dept_array('Dept One', 'Dept Two');
    -- 생성자를 호출하여 배열을 초기화한다. 첫번째, 두번째 요소에 값을 할당한 것이며, 3번째부터 100번째까지는 비어있다.
 
    FOR inx1 IN 1..2 LOOP
        DBMS_OUTPUT.PUT_LINE(depts(inx1));
    END LOOP
    -- 배열의 요소가 2개이므로 depts(1), depts(2)에 들어있는 값을 출력한다.
 
END;
/

 

배열에 요소 추가

- EXTEND 메소드를 호출하여 요소를 추가할 수 있다.

DECLARE
    CURSOR all_depts IS
        SELECT * FROM department ORDER BY dept_name;
 
    TYPE dept_array IS VARRAY(100) OF department%ROWTYPE;
    depts dept_array;
    inx1 PLS_INTEGER;
 
BEGIN
    inx1 := 0;
    depts := dept_array(); -- 배열 초기화. 항목은 0.
 
    FOR dept IN all_depts LOOP
        inx1 := inx1 + 1;
        depts.extend();
        depts(inx1).dept_id := dept.dept_id;
        depts(inx1).dept_name := dept.dept_name;
    END LOOP;
...
 
728x90

댓글