2012-12-14

[ORACLE] CAST Function




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


* 사용문법
  CAST(EXPR AS TYPE_NAME)
하나의 built-in 데이터타입을 다른 데이터타입으로 변경하는 경우 일반적인 데이터 형변환
함수의 사용과 동일하다.

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

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


* 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);

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')

댓글 없음:

댓글 쓰기