1HOON
논리적 코딩
1HOON
전체 방문자
오늘
어제
  • HOME (187)
    • ☕️ JAVA (28)
      • WhiteShip Java LIVE Study (6)
      • Effective JAVA (10)
    • 🔮 KOTLIN (4)
    • 🌱 SPRING (51)
      • 스프링 인 액션 (22)
      • JPA (18)
    • ☕️ JAVASCRIPT (6)
    • 📃 DATABASE (40)
      • ORACLE (37)
      • MSSQL (2)
    • 🐧 LINUX (4)
    • 🐳 DOCKER (5)
    • 🐙 KUBERNETES (4)
    • 🏗️ ARCHITECTURE (8)
    • 📦 ETC (27)
      • TOY PROJECT (5)
      • RECRUIT (1)
      • 그냥 쓰고 싶어서요 (14)
      • TIL (1)
    • 🤿 DEEP DIVE (1)
    • 🚽 Deprecated (9)
      • PYTHON (3)
      • AWS (2)
      • HTTP 완벽가이드 (3)
      • WEB (1)

블로그 메뉴

  • 홈
  • 방명록
  • 관리

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
1HOON

논리적 코딩

[PL/SQL] 컬렉션(COLLECTION)
📃 DATABASE/ORACLE

[PL/SQL] 컬렉션(COLLECTION)

2018. 2. 11. 18:24

컬렉션(COLLECTION)

레코드와 유사한 데이터 타입인데, 레코드보다는 한층 더 향상되고 확장된 형태이다.

사용법이 객체지향 프로그램의 클래스와 유사하다.

생성자를 통해 초기화할 수 있고, 빌트인 함수와 프로시저로 구성된 컬렉션 메서드를 제공하며, 이러한 메서드를 통해 컬렉션에 접근해 값을 수정, 삭제할 수 있다.


종류

- 연관 배열

- VARRAY

- 중첩 테이블



연관 배열(ASSOCIATIVE ARRAY)

키와 값으로 구성된 컬렉션으로, 키를 인덱스라고도 부르기 때문에 연관 배열을 INDEX-BY 테이블이라고도 한다.

연관배열의 키는 유일한 키다.

배열을 구성하는 각 항목을 요소라고 하며, 요소의 값은 연관배열변수명(인덱스) 형태로 접근할 수 있다.

연관배열은 그 크기에 제한 없이 입력해서 사용할 수 있으며, 각 요소에 값을 입력할 때마다 내부적으로는 숫자형이든 문자형이든 인덱스 값으로 정렬된다.


1
TYPE 연관배열명 IS TABLE OF 연관배열값타입 INDEX BY 인덱스타입;
cs


예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE
    -- 숫자-문자 쌍의 연관 배열 선언
    TYPE AV_TYPE IS TABLE OF VARCHAR2(40)
                    INDEX BY PLS_INTEGER;
    
    -- 연관 배열 변수 선언
    VAV_TEST    AV_TYPE;
BEGIN
    -- 연관 배열에 값 할당
    VAV_TEST(10) := '10에 대한 값';
    VAV_TEST(20) := '20에 대한 값';
    
    DBMS_OUTPUT.PUT_LINE(VAV_TEST(10));
    DBMS_OUTPUT.PUT_LINE(VAV_TEST(20));
END;
Colored by Color Scripter
cs




VARRAY(VARIABLE-SIZE ARRAY)

VARRAY는 가변 길이 배열로서 연관 배열과는 달리 그 크기에 제한이 있다.

선언할 때 크기(요소 갯수)를 지정하면 이보다 큰 수로 요소를 만들 수 없다.

연관배열과 동일한 방식으로 요소값에 접근하는데, 숫자형 인덱스만 가능하다.


1
TYPE VARRAY명 IS VARRAY(최대크기) OF 요소값타입;
cs


예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
DECLARE
    -- 5개의 문자형으로 이루어진 VARRAY 선언
    TYPE VA_TYPE IS VARRAY(5) OF VARCHAR2(20);
    
    -- VARRAY 변수 선언
    VVA_TEST    VA_TYPE;
    
    VN_CNT  NUMBER := 0;
BEGIN
    -- 생성자를 사용해 값 할당(최초 3개만 할당)
    VVA_TEST := VA_TYPE('FIRST', 'SECOND', 'THIRD', '', '');
    
    LOOP
        VN_CNT := VN_CNT + 1;
        
        IF VN_CNT > 5 THEN
            EXIT;
        END IF;
    
        DBMS_OUTPUT.PUT_LINE(VVA_TEST(VN_CNT));
    END LOOP;
    
    VVA_TEST(2) := 'TEST';
    VVA_TEST(4) := 'FOURTH';
    
    VN_CNT := 0;
    
    LOOP
        VN_CNT := VN_CNT + 1;
        
        IF VN_CNT > 5 THEN
            EXIT;
        END IF;
    
        DBMS_OUTPUT.PUT_LINE(VVA_TEST(VN_CNT));
    END LOOP;
END;
Colored by Color Scripter
cs




중첩테이블(NESTED TABLE)

중첩 테이블은 실제 테이블이 아니고 컬렉션 타입의 한 종류이다.

크기에 제한은 없지만, 숫자형 인덱스만 사용할 수 있고, 생성자를 이용하여 일반 테이블의 컬럼 타입으로 사용될수 있다.


1
TYPE 중첩테이블명 IS TABLE OF 값타입;
cs


예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE
    -- 중첩테이블 선언
    TYPE NT_TYPE IS TABLE OF VARCHAR2(10);
    
    -- 변수 선언
    VNT_TEST    NT_TYPE;
BEGIN
    -- 생성자를 사용해 값 할당
    VNT_TEST := NT_TYPE('FIRST', 'SECOND', 'THIRD');
    
    -- 값 출력
    DBMS_OUTPUT.PUT_LINE(VNT_TEST(1));
    DBMS_OUTPUT.PUT_LINE(VNT_TEST(2));
    DBMS_OUTPUT.PUT_LINE(VNT_TEST(3));
END;
Colored by Color Scripter
cs



반응형
저작자표시 비영리 변경금지 (새창열림)

'📃 DATABASE > ORACLE' 카테고리의 다른 글

[PL/SQL] 사용자 정의 타입  (2) 2018.02.12
[PL/SQL] 컬렉션 메서드  (0) 2018.02.12
[PL/SQL] 레코드(RECORD) : 커서형 레코드, 중첩 레코드  (0) 2018.02.10
[PL/SQL] 레코드(RECORD) : 사용자정의형 레코드, 테이블형 레코드  (0) 2018.02.08
[PL/SQL] 커서(CURSOR) (3) : 커서 변수  (0) 2018.02.01
    '📃 DATABASE/ORACLE' 카테고리의 다른 글
    • [PL/SQL] 사용자 정의 타입
    • [PL/SQL] 컬렉션 메서드
    • [PL/SQL] 레코드(RECORD) : 커서형 레코드, 중첩 레코드
    • [PL/SQL] 레코드(RECORD) : 사용자정의형 레코드, 테이블형 레코드
    1HOON
    1HOON

    티스토리툴바