Oracle
是否可以使用 Oracle XMLTABLE 和 %type 列類型選擇器?
我正在創建一個儲存過程,它獲取 xml 輸入並使用
XMLTABLE
.我想知道在 XMLTABLE 中傳遞列時如何根據表列類型指定欄位類型。(使用 %type 之類的東西)。
這是我的簡化程式碼:
SELECT tmp.* FROM (SELECT XMLTYPE(xml_in) AS xml FROM dual), XMLTable('for $i in /rowset/row return $i' PASSING xml COLUMNS name MYTABLE.name%TYPE path 'name', // %TYPE just doesnt work here :( family MYTABLE.family%TYPE path 'family' ) tmp
您不能在子句中使用該
%TYPE
構造。COLUMNS
但是,根據您對數據的處理方式,在此查詢中不要對數據過於嚴格可能是個好主意。例如,如果我們從您之前的問題中獲取數據,請注意以下內容不會導致錯誤:
SQL> SELECT x.* 2 FROM XMLTable('for $i in /rowset/row return $i' 3 passing XMLTYPE(:xml) 4 columns 5 name varchar2(1) path 'name', 6 family varchar2(1) path 'family' 7 ) x; NAME FAMILY ---- ------ t m m s
而在大多數情況下,如果您有一個 XML 文件作為輸入,並且列大於表中指定的列,則這將被視為異常。
這就是為什麼您可以,如果您打算對輸入文件執行驗證,將所有列載入為文本 (
VARCHAR2(4000)
),然後插入到臨時表中。這將導致適當的錯誤。