2010-12-20 32 views
1

在Oracle中,給定一個表名稱列表,我想在大量的表上執行'從table'語句中選擇column1到var1中。我想爲表格的所有列執行此操作。直到使用user_tab_columns的查詢返回列的類型,我才能聲明var1的類型。我試圖將var1聲明爲sys.anytype,但得到了ORA-00932錯誤消息,比如「不一致的數據類型:expected CHAR got CHAR」。在oracle中的動態聲明/查詢9i

那麼我怎樣才能通過這個錯誤,或者我該如何動態聲明一個變量?非常感謝。

回答

0

Craig是正確的,你應該聲明它是一個anytype的VARCHAR2 instad。

This article作者:傑夫亨特有一個很好的功能,這使得這種方式很容易填充變量的方式,不會打破如果您的數據無法轉換。

CREATE OR REPLACE FUNCTION getData(data IN SYS.ANYDATA) 
    RETURN VARCHAR2 
    AS 
     l_varchar2 VARCHAR2(4000); 
     l_rc   NUMBER; 
    BEGIN 

     CASE data.getTypeName 
     when 'SYS.NUMBER' then 
      l_rc := data.getNumber(l_varchar2); 
     when 'SYS.DATE' then 
      l_rc := data.getDate(l_varchar2); 
     when 'SYS.VARCHAR2' then 
      l_rc := data.getVarchar2(l_varchar2); 
     else 
      l_varchar2 := '** unknown **'; 
     END CASE; 

     RETURN l_varchar2; 

    END; 
1

大多數數據類型將隱式轉換爲VARCHAR。顯然有例外,但如果你的表只是變種,日期和數字,那麼你應該沒問題。