ORACLE CAST FUNCTION
from OTN CAST| http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions016.htm#SQLRF00613
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 를 적용했다.