在Oracle中,給定一個表名稱列表,我想在大量的表上執行'從table'語句中選擇column1到var1中。我想爲表格的所有列執行此操作。直到使用user_tab_columns的查詢返回列的類型,我才能聲明var1的類型。我試圖將var1聲明爲sys.anytype,但得到了ORA-00932錯誤消息,比如「不一致的數據類型:expected CHAR got CHAR」。在oracle中的動態聲明/查詢9i
那麼我怎樣才能通過這個錯誤,或者我該如何動態聲明一個變量?非常感謝。
在Oracle中,給定一個表名稱列表,我想在大量的表上執行'從table'語句中選擇column1到var1中。我想爲表格的所有列執行此操作。直到使用user_tab_columns的查詢返回列的類型,我才能聲明var1的類型。我試圖將var1聲明爲sys.anytype,但得到了ORA-00932錯誤消息,比如「不一致的數據類型:expected CHAR got CHAR」。在oracle中的動態聲明/查詢9i
那麼我怎樣才能通過這個錯誤,或者我該如何動態聲明一個變量?非常感謝。
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;
大多數數據類型將隱式轉換爲VARCHAR。顯然有例外,但如果你的表只是變種,日期和數字,那麼你應該沒問題。