![](/img/trans.png)
[英]how can I select XML attribute from oracle XMLTYPE column?
[英]ORACLE SQL: How can I get the XML elements from within a column of XMLTYPE
我有一個多個xml文檔,如下所示:
<farm>
<name>Johns Farm</name>
<size>50 hectares</size>
<employees>20</employees>
<fruits>
<fruit>Banana</fruit>
<fruit>Apple</fruit>
<fruit>Watermelon</fruit>
</fruits>
</farm>
我在這樣的oracle數據庫中得到了這個:
CREATE TABLE FARM_XML_TABLE
(FARM_NUMBER NUMBER NOT NULL PRIMARY KEY, FARM_XML XMLTYPE NOT NULL)
XMLTYPE COLUMN FARM_XML STORE AS BINARY XML
XMLSCHEMA
"http://myproject.com/farmschema.xsd"
ELEMENT "farm";
各種服務器場存儲在FARM_XML
列中。 大約有5個
如何以XML格式從多個場的FARM_XML
列中僅檢索名稱和員工元素。 我希望輸出如下:
<farm>
<name>Johns Farm</name>
<employees>20</employees>
</farm>
<farm>
<name>Harrys Farm</name>
<employees>10</employees>
</farm>
我試過這樣做,但輸出不是我想要的所有xml元素。
SELECT extract(FARM_XML, 'farm/name').getStringVal()
FROM FARM_XML_TABLE;
Oracle安裝程序 :
CREATE TABLE FARM_XML_TABLE(
FARM_NUMBER NUMBER PRIMARY KEY,
FARM_XML XMLTYPE NOT NULL
)
XMLTYPE COLUMN FARM_XML STORE AS BINARY XML;
INSERT INTO FARM_XML_TABLE VALUES(
1,
XMLtype( '<farm>
<name>Johns Farm</name>
<size>50 hectares</size>
<employees>20</employees>
<fruits>
<fruit>Banana</fruit>
<fruit>Apple</fruit>
<fruit>Watermelon</fruit>
</fruits>
</farm>' )
);
查詢1 - 重建XML :
SELECT FARM_NUMBER,
XMLElement(
"farm",
XMLElement( "name", EXTRACTVALUE( farm_xml, '/farm/name' ) ),
XMLElement( "employees", EXTRACTVALUE( farm_xml, '/farm/employees' ) )
) AS xml
FROM FARM_XML_TABLE;
或(更新 - 更簡單的版本):
SELECT FARM_NUMBER,
XMLElement(
"farm",
EXTRACT( farm_xml, '/farm/name' ),
EXTRACT( farm_xml, '/farm/employees' )
) AS xml
FROM FARM_XML_TABLE;
查詢2 - 從現有XML中刪除不匹配的元素 :
SELECT FARM_NUMBER,
DELETEXML(
farm_xml,
'/farm/*[name()!=''name''][name()!=''employees'']'
) AS xml
FROM FARM_XML_TABLE;
輸出 :
(兩者輸出相同)
FARM_NUMBER XML
----------- -------------------------------------------------------------
1 <farm><name>Johns Farm</name><employees>20</employees></farm>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.