본문 바로가기

ORACLE

ORACLE CAST FUNCTION v1.0

ORACLE CAST FUNCTION

 

 

1.    CAST

CAST는 하나의 built-in 데이터 타입이나 collection-typed value 를 다른 built-in datatype 이나 collection-typed value 로 변환해 준다.

 

사용문법은 아래와 같다.

 

cast( expr                ) as type_name )

     ( multiset ( subquery) 

 

하나의 built-in 데이터타입을 다른 데이터타입으로 변경하는 경우 일반적인 데이터 형변환

함수의 사용과 동일하다.

 

일반적인 형변환 함수와 구분되는 특징은 multiset 에 대해 형변환을 할 수 있다는 것이다.

 

CAST LONG, LONG RAW 를 지원하지 않는다.

 

2.    CAST 예제

A.     하나의 built-in data type 에서 하나의 built-in data type 으로 변환

SQL> desc dept

 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 DEPTNO                                             NUMBER(2)

 DNAME                                              VARCHAR2(14)

 LOC                                                VARCHAR2(13)

 

 

SQL> create table dept1

  2  as select cast(deptno as varchar2(2)) deptno,

  3  cast(dname as varchar2(20)) dname

  4  from dept;

 

Table created.

 

SQL> desc dept1

 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 DEPTNO                                             VARCHAR2(2)

 DNAME                                              VARCHAR2(20)

 

DEPTNO 의 데이터형이 변경되고 DNAME VARCHAR2 타입의 데이터길이가 변경된 걸

확인할 수 있다.

 

SQL> create table dept2

  2  as select cast(deptno as varchar2(2)) deptno,

  3  cast(dname as varchar2(5)) dname

  4  from dept;

 

Table created.

 

SQL> select * from dept2;

 

DE DNAME

-- -----

10 ACCOU

20 RESEA

30 SALES

40 OPERA

 

cast 에서 varchar2 데이터 형의 길이를 본래의 길이보다 더 짧게 변환할 때

입력되어있는 데이터 길이가 변경되는 길이보다 긴 경우 위와 같이 overflow

부분은 제거된다.

 

B.     built-in data type collection-typed value 로 변환

SQL> create or replace type dept_typ as table of varchar2(14);

  2  /

 

Type created.

 

SQL> select e.ename,

  2  cast(multiset(select d.dname from dept d where d.deptno=e.deptno) as dept_typ) as charset

  3  from emp e

  4  where rownum < 5;

 

ENAME      CHARSET

---------- --------------------

SMITH      DEPT_TYP('RESEARCH')

ALLEN      DEPT_TYP('SALES')

WARD       DEPT_TYP('SALES')

JONES      DEPT_TYP('RESEARCH')

 

위와 같이 multiset 에 대해 cast 를 적용했다.