讓我們以這個 XML 為例。
<breakfast_menu>
<food>
<name>Belgian Waffles</name>
<name>Cake</name>
<price>$5.95</price>
<calories>650</calories>
</food>
... there will be more types of food so the xml can be longer
<food>
<name>Belgian Waffles(2)</name>
<name>Cake(2)</name>
<price>$5.95(2)</price>
<calories>650(2)</calories>
</food>
</breakfast_menu>
我將它加載XML_T到XML_FILE_DATA列中的表中,我可以使用這樣的東西來檢索值。
SELECT X.*
FROM XML_T,
XMLTABLE('/breakfast_menu/food'
PASSING XML_T.XML_FILE_DATA
COLUMNS
"price" VARCHAR2(50) PATH 'price',
"calories" VARCHAR2(50) PATH 'calories',
) X;
但如果我嘗試檢索<name>這樣的:
SELECT X.*
FROM XML_T,
XMLTABLE('/breakfast_menu/food'
PASSING XML_T.XML_FILE_DATA
COLUMNS
"name" VARCHAR2(50) PATH 'name',
"price" VARCHAR2(50) PATH 'price',
"calories" VARCHAR2(50) PATH 'calories',
) X;
我得到錯誤ORA-19279: XPTY0004 - XQuery dynamic type mismatch: expected singleton sequence - got multi-item sequence。我知道這是因為有多個名稱值,但我不知道如何修復它。
我希望能夠獲得 2 個名稱并將它們合并在一個列中,如下所示:Belgian Waffles Cake
即使它有 2 個以上的名稱,可能有 3 或 4 個,這也應該將所有名稱合并在一起,中間有空格。
uj5u.com熱心網友回復:
您可以在 XPath 選擇器中指定要查找的名稱,如下所示:
WITH xml_t (xml_file_data) AS (SELECT '<breakfast_menu>
<food>
<name>Belgian Waffles</name>
<name>Cake</name>
<price>$5.95</price>
<calories>650</calories>
</food>
<food>
<name>Belgian Waffles(2)</name>
<name>Cake(2)</name>
<price>$5.95(2)</price>
<calories>650(2)</calories>
</food>
</breakfast_menu>' FROM DUAL)
SELECT TRIM (name1 || ' ' || name2 || ' ' || name3 || ' ' || name4) AS combined_names, x.*
FROM xml_t,
XMLTABLE ('/breakfast_menu/food'
PASSING xmltype (XML_T.XML_FILE_DATA)
COLUMNS name1 VARCHAR2 (50) PATH 'name[1]',
name2 VARCHAR2 (50) PATH 'name[2]',
name3 VARCHAR2 (50) PATH 'name[3]',
name4 VARCHAR2 (50) PATH 'name[4]',
price VARCHAR2 (50) PATH 'price',
calories VARCHAR2 (50) PATH 'calories') X;
COMBINED_NAMES NAME1 NAME2 NAME3 NAME4 PRICE CALORIES
_____________________________ _____________________ __________ ________ ________ ___________ ___________
Belgian Waffles Cake Belgian Waffles Cake $5.95 650
Belgian Waffles(2) Cake(2) Belgian Waffles(2) Cake(2) $5.95(2) 650(2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/398201.html
