2012-10-02 29 views
6

Tôi đang sử dụng DB XML của Oracle để tạo hồ sơ người dùng. Tôi đã lưu hồ sơ người dùng trong một cột XMLTYPE duy nhất với các cột quan hệ khác (id, tên người dùng, mật khẩu) trong bảng. XML là định dạng sau:cách sử dụng xmltable trong oracle?

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

tôi đã sử dụng các truy vấn sau đây,

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

mà mang lại cho tôi gì cả. Làm thế nào tôi có thể làm cho điều này hoạt động?

Trả lời

22

actionobject trên ví dụ của bạn không ở cùng cấp, do đó truy vấn của bạn phải thực hiện các bước bổ sung. Dưới đây là một ví dụ:

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> 

Như bạn có thể thấy chúng tôi đã nhận nút, không thực sự những gì bạn muốn vì vậy chúng tôi thêm một XMLTABLE:

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 
Các vấn đề liên quan