DB/ORACLE

32.[오라클]컬렉션 사용자정의 데이터타입 정리

혼자좀비 2025. 1. 25. 16:50

 사용자 정의 타입으로 사용할수 있는 컬렉션 타입은 연관배열을 제외한 VARRAY와 중첩테이블만 사용할수 있다.

컬렉션은 아니지만 OBJECT타입도 사용자 정의 타입으로 사용할수 있다.(객체지향과 비슷한 개념이지만 메소드나 함수등에 따라 쫌 다르다..)

 

※컬렉션 타입별 선언구문

  • VARRAY : CREATE OR REPLACE TYPE [타입명] IS VARRAY(최대크기) OF [값타입];
  • 중첩 테이블 : CREATE OR REPLACE TYPE [타입명] IS TABLE OF 값타입;
  • OBJECT : CERATE OF REPLACE TYPE [타입명] IS OBJECT(타입1 타입1_데이터타입 , 타입2 타입2_데이터타입......);

별도 타입을 선언하지 않고 사용자가 정의한 컬렉션 타입을 생성하여 매번 선언할 필요 없이 변수만 선언해서 바로 사용할수 있다.

 

 

※다차원 컬렉션

위의 이미지와 같이 다차원 컬렉션은 2차원으로 사용이 가능하고, 중첩시켜 3차원이상도 가능하다.

위의 이미지와 같이 테이블의 정보를 사용자가 선언한 중첩테이블에 추가하여 조회할수 있다.

 

※연관배열과 중첩테이블 차이점 정리

 연관배열과 중첩테이블은 선언시 크기에 제한이 없다는 공통점이 있는 반면, 문자형 인덱스는 연관배열만 사용할수 있고 생성자는 중첩테이블만 사용할수 있다는 차이점이 존재한다.

연관 배열은 사용자정의 타입으로 정의해 사용할수 없으며 PL/SQL블록이 실행된때 메모리 상에서 존재했다 사라지므로, 소량의 데이터를 담아두고 참조할때 주로 사용한다.

(중첩 테이블은 연관배열고 다르게 데이터베이스 객체의 하나로 존재..)

 

※VARRAY와 중첩테이블 차이점 정리

 VARRAY는 선언시 크기를 지정하지만 중첩테이블은 크기제한이 없고 동적으로 크기가 확장된다는 차이점이 있다.

유사점으로는 사용자 정의 타입으로 만들수 있고, 생성자를 사용할수 있다는 점이다.

그리고 VARRAY와 중첩 테이블은 일반 테이블의 컬럼 타입으로 사용할수 있다는 장점이 있다.

 

 

 

※테이블 칼럼 타입으로 중첩 테이블 사용

사용자가 정의한 데이터 타입을 사용할 경우 아래와 같이 사용해야 한다.

위의 이미지와 같이 중첩테이블을 컬럼 타입을 가진 일반 테이블을 생성할 경우 해당 칼럼이 저장될 별도의 저장공간을 명시하여 사용해야한다.

(별도의 저장공간을 명시 : NESTED TABLE contry_nm STORE AS country_nm_nt 부분)

테이블을 명시 후 데이터를 넣게 되면 varray사용자 정의 타입으로 선언한 country_var와 컬렉션에 들어간 값으로 출력된다.

두번째부분을 보면 사용자가 정의한대로 나오고, 3번째TABLE함수로 추출했을때 해당 값만 추출이 가능하다.

위와 같이 사용자가 선언한 타입이 출력되는데 이런경우에는 "TABLE()"함수를 사용하면 컬렉션에 들어있는 값만 골라낼수 있다.

해당 부분의 값만 출력을 원할 경우 조건부분을 추가해서 조회하면 된다.

 

 

※DML을 이용한 요소처리(INSERT,UPDATE,DELETE)

중첩테이블에 INSERT할 경우

위의 이미지와 같이 INSERT문에 TABLE함수를 사용하여 중첩테이블 타입의 컬럼 데이터를 로우형식으로 변환하여 해당 칼럼에 신규요소값이 추가가 된것을 확인할수 있다.

중첩테이블에 UPDATE할 경우

위의 이미지와 같이 UPDATE시 TABLE함수를 사용하여 해당 로우 값을 반환하고 VALUE키워드를 이용하여 로우를 UPDATE한다.

중첩테이블에 DELETE할 경우

UPDATE와 같이 조건문을 걸어 삭제 처리를 하였다.

 

※컬렉션 타입별 특징

구분 배열 VARRAY 중첩테이블
생성구문 TYPE [명칭] IS TABLE OF 값타입 INDEX BY 인덱스타입 TYPE [명칭] IS VARRAY(최대크기) OF 값타입; TYPE 명칭 IS TABLE OF 값타입;
크기제한 없음 있음 없음
생성자 없음 있음 없음
인덱스 타입 숫자,문자 숫자 숫자
사용자 정의타입 불가 선언가능 선언가능
테이블 컬럼 불가 사용가능 사용가능
TABLE함수 불가 사용가능 사용가능
DML 불가 불가 가능

 

 

TO.오라클 SQL과 PL/SQL을 다루는 기술 책을 참고하여 공부함.

(오라클 공부할때 해당 책을 참고하여 공부하면 좋을듯하다.)

'DB > ORACLE' 카테고리의 다른 글

31.[오라클]컬렉션 메소드  (0) 2025.01.25
30.[오라클]컬렉션  (0) 2024.04.13
29.[오라클]레코드  (0) 2024.03.06
28.[오라클]커서  (0) 2024.02.24
27.[오라클]트랜잭션  (0) 2024.02.24