2012-10-02 7 views
6

मैं उपयोगकर्ता प्रोफाइल बनाने के लिए ओरेकल के एक्सएमएल डीबी का उपयोग कर रहा हूं। मैंने तालिका में अन्य रिलेशनल कॉलम (आईडी, उपयोगकर्ता नाम, पासवर्ड) के साथ एक एकल XMLTYPE कॉलम में उपयोगकर्ता प्रोफाइल संग्रहीत किए। एक्सएमएल निम्न स्वरूप का है:ऑरैकल में xmltable का उपयोग कैसे करें?

<profile> 
<subject>I 
     <action>like 
      <object>sports</object> 
       ... 
      <object>music</object 
     </action> 
    </subject> 
</profile> 

मैं निम्न क्वेरी,

SELECT * 
FROM user, 
XMLTABLE(
'//profile' 
PASSING user.profile 
return COLUMNS action VARCHAR2(20) PATH '/subject/action', 
     object VARCHAR2(30) PATH '/subject/action/object' 
); 

जो मुझे कुछ भी नहीं देता है इस्तेमाल किया। मैं यह काम कैसे कर सकता हूं?

उत्तर

22

action और object आपके उदाहरण पर समान स्तर पर नहीं हैं, इसलिए आपकी क्वेरी को अतिरिक्त कदम उठाने हैं।

SQL> select u.id, x.action, y.object 
    2 from users u, 
    3   XMLTABLE('/profile/subject/action' 
    4     passing u.profile 
    5     columns action VARCHAR2(30) PATH 'text()', 
    6       object XMLTYPE PATH 'object') x, 
    7   XMLTABLE('/object' 
    8     passing x.object 
    9     columns object VARCHAR2(30) PATH '.') y; 

ID ACTION OBJECT 
--- ------- ------- 
1 like sports 
1 like music 
:

SQL> create table users (id number, profile xmltype); 

Table created. 

SQL> insert into users values (1, XMLTYPE('<profile> 
    2  <subject>I 
    3   <action>like 
    4    <object>sports</object> 
    5    <object>music</object> 
    6   </action> 
    7  </subject> 
    8 </profile>')); 

1 row created. 

SQL> select u.id, x.action, x.object.getStringVal() 
    2 from users u, 
    3   XMLTABLE('/profile/subject/action' 
    4     passing u.profile 
    5     columns action VARCHAR2(30) PATH 'text()', 
    6       object XMLTYPE PATH 'object') x; 

ID ACTION X.OBJECT.GETSTRINGVAL() 
--- ------- -------------------------------------------------- 
1 like <object>sports</object> <object>music</object> 

आप देख सकते हैं हम नोड, मिला नहीं वास्तव में क्या आप ऐसा चाहते हैं हम एक XMLTABLE जोड़ें: यहाँ एक उदाहरण है