Skip Headers

오라클 10g 함수
10g Release 1 (10.1)
Go to Documentation Home
HOME
Go to Book List
ORA_home
Go to Table of Contents
연구회
Go to Index
자료실
Go to Master Index
ORA_10G
Go to Feedback page
MAIL

Go to previous page
Previous
Go to next page
Next

CAST

문법

MAIN

cast::=
Description of cast.gif follows

그림 설명

 

목적

MAIN

CAST 함수는 데이터 형식이나 collection 형식을 다른 데이터 형식이나 collection 형식으로변환한다.

CAST함수는 편성된 데이터 타입 또는 컬렉션 타입 값을 다른 편성된 데이터 타입 또는 컬렉션 타입으로 변경한다. 이름이 없는 피연산자(일자 또는 서브쿼리의 결과 세트와 같은) 또는 타입 호환 데이터타입 또는 명명된 컬렉션에서 명명된 컬렉션(VARRAY 또는 중첩테이블)을 형변환 할수있다. Type_name은 편성된 데이터형 또는 컬렉션 타입일 필요가 있고, 피연산자는 편성된 데이터형일 필요가 있고, 컬렉션 값을 평가할 필요가 있다.

피연자에서, expr은 평선 데이터형, 컬렉션 타입, AnyData타입의 인트턴스중에 하나일수 있다. 만약 expr이 AnyData 타입의 인스턴스라면, CAST함수는 AnyData 인스턴스의 값을 추출을 시도하고, 만약 cast taget 타입과 일치하면 값을 반환하고, 일치하지 않으면 Null을 반환한다. MULTISET은 서브쿼리의 결과 세트를 취해 오라클 데이터베이스에 알리고, 컬렉션 값을 반환한다. Table 7-1은 편성된 데이터형을 취해서 다른 편성 데이터형으로 형변환할수 있는지 보인다.(CAST함수는 LONG,LONG RAW,LOB 데이터형, 오라클 지원 형태를 지원하지 않는다.)

Table 7-1 편성된 데이터형의 형변환


from BINARY_FLOAT, BINARY_DOUBLE from CHAR, VARCHAR2 fromNUMBER from DATETIME / INTERVAL (Note 1) fromRAW from ROWID, UROWID (Note 2) from NCHAR, NVARCHAR2
to BINARY_FLOAT, BINARY_DOUBLE X X X


X
to CHAR, VARCHAR2 X X X X X X
to NUMBER X X X


X
to DATE, TIMESTAMP, INTERVAL
X
X


to RAW
X

X

to ROWID, UROWID
X


Xa
to NCHAR, NVARCHAR2 X
X X X X X
 

주1: Datetime/intervalDATE, TIMESTAMP, TIMESTAMP WITH TIMEZONE, INTERVAL DAY TO SECOND, and INTERVAL YEAR TO MONTH을 포함한다.

2: 만약 UROWID가 색인 구성표의 ROWID의 값을 포함하면, UROWID를 ROWID로 형변환 할수 없다.

만약 명명된 컬렉션 타입을 다른 명명된 컬렉션 타입으로 형변환을 원한다면, 양쪽 컬렉션의 요소는 같은 형태일 필요가 있다.

만약 서브쿼리의 결과 세트가 다중 행을 평가할수 있다면, MULTISET 키워드를 지정할 필요가 있다. 서브쿼리로 부터 결과 행은 형변환 된 컬렉션값의 요소를 형성한다. MULTISET키워드를 생략하면, 서브쿼리는 스칼라 서브쿼리로서 처리된다.

 

예제

MAIN

Built-In Datatype 예제

다음 예제는 스칼라 데이터형과 함께 CAST함수를 이용한다.

SELECT CAST('22-OCT-1997' AS TIMESTAMP WITH LOCAL TIME ZONE) 
   FROM dual;

SELECT product_id, 
   CAST(ad_sourcetext AS VARCHAR2(30))
   FROM print_media;

Collection 예제

계속되는 CAST예제는 샘플 주문 엔트리 스키마oe에 기초하여 cust_address_typ에 근거한다.

CREATE TYPE address_book_t AS TABLE OF cust_address_typ;
/
CREATE TYPE address_array_t AS VARRAY(3) OF cust_address_typ;
/
CREATE TABLE cust_address (
   custno            NUMBER, 
   street_address    VARCHAR2(40), 
   postal_code       VARCHAR2(10), 
   city              VARCHAR2(30),
   state_province    VARCHAR2(10), 
   country_id        CHAR(2));

CREATE TABLE cust_short (custno NUMBER, name VARCHAR2(31));

CREATE TABLE states (state_id NUMBER, addresses address_array_t);

이 예제는 서브쿼리를 형변환한다.

SELECT s.custno, s.name,
   CAST(MULTISET(SELECT ca.street_address,   
                        ca.postal_code, 
                        ca.city, 
                        ca.state_province, 
                        ca.country_id
                 FROM cust_address ca
                 WHERE s.custno = ca.custno)
   AS address_book_t)
FROM cust_short s;

CAST는 varray타입 열을 중첩 테이블로 변환한다.

CAST converts a varray type column into a nested table:

SELECT CAST(s.addresses AS address_book_t)
   FROM states s 
   WHERE s.state_id = 111; 

다음 오브젝트는 이후 예제의 기초를 생성한다.

CREATE TABLE projects 
   (employee_id NUMBER, project_name VARCHAR2(10));

CREATE TABLE emps_short 
   (employee_id NUMBER, last_name VARCHAR2(10));

CREATE TYPE project_table_typ AS TABLE OF VARCHAR2(10);
   /

다음 MULTISET 표현의 예제는 위 오브젝트를 이용한다.

The following example of a MULTISET expression uses these objects:

SELECT e.last_name,
   CAST(MULTISET(SELECT p.project_name
   FROM projects p 
   WHERE p.employee_id = e.employee_id
   ORDER BY p.project_name)
   AS project_table_typ)
FROM emps_short e;