Oracle

是否可以使用 Oracle XMLTABLE 和 %type 列類型選擇器?

  • July 16, 2013

我正在創建一個儲存過程,它獲取 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)),然後插入到臨時表中。這將導致適當的錯誤。

引用自:https://dba.stackexchange.com/questions/39737