【问题标题】:how to use xmltable in oracle?oracle中如何使用xmltable?
【发布时间】:2012-09-23 08:10:35
【问题描述】:

我正在使用 Oracle 的 XML DB 创建用户配置文件。我将用户配置文件与表中的其他关系列(id、用户名、密码)一起存储在单个 XMLTYPE 列中。 XML 格式如下:

<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'
);

这没有给我任何东西。我怎样才能使这件事起作用?

【问题讨论】:

    标签: xml oracle


    【解决方案1】:

    您的示例中的actionobject 不在同一级别,因此您的查询必须执行其他步骤。这是一个例子:

    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

    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
    

    【讨论】:

      猜你喜欢
      • 2014-08-14
      • 2012-03-08
      • 1970-01-01
      • 2017-12-06
      • 2016-04-28
      • 1970-01-01
      • 2020-04-29
      • 2020-11-04
      • 1970-01-01
      相关资源
      最近更新 更多