2012-06-19 32 views
1

我有存儲在Oracle 11g數據庫中的XML類型數據。我的數據的一個粗略的版本是這樣的:Oracle 11g:抽取和計數XML元素

<?xml version="1.0" encoding="UTF-8"?> 
<record> 
<record_number>12345</record_number> 
<record_type> book </record_type> 
</record> 

數據操作功能,如:

SELECT XML_Type FROM Metadata 

指定每行包含一個格式良好的XML文件(使用多個標籤和元素列)。我努力提取並計算每個<record_type>元素的出現次數。例如,我想知道XML標記<record_type>有多少次元素「書」,「文章」等。但我不知道與標記關聯的所有元素列表。

感謝,

回答

3

根據您的數據是如何存儲(即你有1列在表1個的XML文檔,看起來像你張貼的樣品或者你有1排在是在它)是最簡單可行的方法很多不同的記錄標記1個XML文檔的表是一樣的東西

SQL> ed 
Wrote file afiedt.buf 

    1 with t as (select '<?xml version="1.0" encoding="UTF-8"?> 
    2      <record> 
    3      <record_number>12345</record_number> 
    4      <record_type> book </record_type> 
    5      </record>' xml 
    6    from dual 
    7    union all 
    8    select '<?xml version="1.0" encoding="UTF-8"?> 
    9      <record> 
10       <record_number>6789</record_number> 
11       <record_type> magazine </record_type> 
12      </record>' xml 
13     from dual) 
14 select xmltype(t.xml).extract('//record_number/text()') record_number, 
15   xmltype(t.xml).extract('//record_type/text()') record_type 
16* from t 
SQL>/

RECORD_NUMBER  RECORD_TYPE 
-------------------- ------------------------------ 
12345     book 
6789     magazine 

一旦您已經提取的數據,應該是很容易算或以其他方式彙總數據。

+0

賈斯汀,謝謝你的回覆,不幸的是我似乎並沒有把我的頭轉過來。數據存儲在名爲「XML Type」(來自表「元數據」)的列下,每行都是一個相當詳細的XML元數據文件(是,多個記錄標籤)。你可以添加一些關於你的代碼實際上做的更多細節嗎?非常感謝,我對XQuery不存在的知識表示歉意...... – paranza