2013-02-14 58 views
1

我有一個類型聲明爲是否可以將varchar2列轉換爲用戶定義的類型?

TYPE "TABLE_TYPE" AS TABLE OF varchar2(4000) 

我怎麼能轉換成一列我在查詢選擇返回該類型。

例如

Select cast(to_char(sysdate) as TABLE_TYPE) from dual 

返回一個ORA-00932: inconsistent datatypes: expected - got CHAR錯誤。有沒有辦法將一個varchar2的列轉換爲用戶定義的類型?

+0

哇,你今天忙齊格;-) – tbone 2013-02-14 19:40:58

回答

3

如果你真的想用一個單一的元素返回一個集合,你只需要調用類的構造函數

SQL> create type table_type as table of varchar2(100); 
    2/

Type created. 

SQL> select table_type(to_char(sysdate)) 
    2 from dual; 

TABLE_TYPE(TO_CHAR(SYSDATE)) 
----------------------------------------------------------------------------- 
TABLE_TYPE('14-FEB-13') 

但是通常,當你創建一個集合,其目的是通過運行返回多行的查詢來使用多個元素來填充它。對於這一點,你會想要做這樣的事情

DECLARE 
    l_strs table_type; 
BEGIN 
    SELECT ename 
    BULK COLLECT INTO l_strs 
    FROM emp; 
    <<l_strs now contains 1 element for each row in the EMP table>> 
END; 
1
select table_type(to_char(sysdate)) from dual; 
3

使用CAST +多集

select cast(multiset(
    select to_char(sysdate-level, 'YYYYMMDD') 
    from dual 
    connect by level <= 10 
) as t_vchar_tab) 
from dual; 
相關問題