2011-02-02 19 views
2

誰でも複雑なXMLを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> 

を、私は2つの<UserEmailPreferences>のノードを持っています。それは2つ、3つ、または何でもよい...それは動的です。

ノードのノードは、対応する<EmailOffering>ノードに対して再び動的です。

OracleでこのようなXMLをどのように処理することができますか?

答えて

2

あなたは、たとえば、SOの質問"Oracle Pl/SQL: Loop through XMLTYPE nodes"に記載の方法を使用することができます:それは囲みタグがありませんでしたので、あなたのXMLが有効なドキュメントではなかったこと

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> 

注意を(私はタグ/documentを追加しました)

関連する問題