您的示例上的操作和对象不在同一级别,因此您的查询必须执行其他步骤.这是一个例子:
SQL> create table users (id number, profile xmltype);
Table created.
SQL> insert into users values (1, XMLTYPE('
2 I
3 like
4 sports
5 music
6
7
8 '));
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 sports music
正如您所看到的,我们得到了节点,而不是您想要的,所以我们添加了一个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