2011-02-02 76 views
2

任何人都可以請告訴我如何在Oracle中處理複雜的XML?例如,我有以下XML:Oracle中的複雜XML處理

<?xml version="1.0" encoding="utf-8" ?> 
<UserEmailPreferences> 
<EmailOffering> 
    <EmailGroupID>1</EmailGroupID> 
    <EmailOfferingID>0</EmailOfferingID> 
    <Service> 
    <val>service-1</val> 
    <val>service-2</val> 
    </Service> 
    <Title>Clinical Focus</Title> 
    <SubscriptionOption>D</SubscriptionOption> 
    </EmailOffering> 
</UserEmailPreferences> 
<UserEmailPreferences> 
<EmailOffering> 
    <EmailGroupID>1</EmailGroupID> 
    <EmailOfferingID>0</EmailOfferingID> 
    <Service> 
    <val>service-1</val> 
    </Service> 
    <Title>XYZ</Title> 
    <SubscriptionOption>D</SubscriptionOption> 
    </EmailOffering> 
</UserEmailPreferences> 

在上面的XML中,我有兩個<UserEmailPreferences>節點。它可以是兩個,三個或其他......這是動態的。

<UserEmailPreferences>節點中,我有<Service>塊,它對於相應的<EmailOffering>節點也是動態的。

任何人都可以請幫我我如何在Oracle中處理這樣的XML?

回答

2

您可以使用所描述的方法SO質疑"Oracle Pl/SQL: Loop through XMLTYPE nodes",例如:

SQL> SELECT extractvalue(column_value,'/EmailOffering/EmailGroupID') "GrpID", 
    2   extractvalue(column_value,'/EmailOffering/EmailOfferingID')"OfrID", 
    3   extractvalue(column_value,'/EmailOffering/Title') "Title", 
    4   extractvalue(column_value,'/EmailOffering/SubscriptionOption')"Op", 
    5   extract(COLUMN_VALUE, '/EmailOffering/Service') service 
    6 FROM TABLE(XMLSequence(XMLTYPE('<?xml version="1.0" encoding="utf-8"?> 
    7 <document> 
    8  <UserEmailPreferences> 
    9  <EmailOffering> 
10  <EmailGroupID>1</EmailGroupID> 
11  <EmailOfferingID>0</EmailOfferingID> 
12  <Service> 
13   <val>service-1</val> 
14   <val>service-2</val> 
15  </Service> 
16  <Title>Clinical Focus</Title> 
17  <SubscriptionOption>D</SubscriptionOption> 
18  </EmailOffering> 
19  </UserEmailPreferences> 
20  <UserEmailPreferences> 
21  <EmailOffering> 
22  <EmailGroupID>1</EmailGroupID> 
23  <EmailOfferingID>0</EmailOfferingID> 
24  <Service> 
25   <val>service-1</val> 
26  </Service> 
27  <Title>XYZ</Title> 
28  <SubscriptionOption>D</SubscriptionOption> 
29  </EmailOffering> 
30  </UserEmailPreferences> 
31 </document>').extract('/document/UserEmailPreferences/EmailOffering'))) t; 

GrpID OfrID Title    Op  SERVICE 
------ ------ -------------------- ------ ------------------------------------- 
1  0  Clinical Focus  D  <Service> 
              <val>service-1</val> 
              <val>service-2</val> 
              </Service> 

1  0  XYZ     D  <Service> 
              <val>service-1</val> 
              </Service> 

請注意,您的XML是不是因爲它缺少一個封閉標記有效證件(我加了標籤/document