0

我有一个这样的 XMLTYPE

<QuestionCategory>
   <categoryId>
   </categoryid>
   <questions>
      <question>
        <questionId>1</questionId>
        <questiontext>abc</questiontext>
      </question>
      <question>
      </question>
      <question>
      </question>
   </questions>  
</QuestionCategory>

我需要从此 XML 中获取问题 ID 并将它们插入到表中。我怎样才能做到这一点。我试过循环遍历“问题”节点。

4

1 回答 1

0

您可以使用XMLTable从 XML 结构中提取相关的信息行。你已经用它标记了这个问题,所以你可能只是试图实现它。

使用您展示的简单大纲,您可以执行以下操作:

select *
from xmltable('/QuestionCategory/questions/question'
  passing your_xmltype_value
  columns question_id number path 'questionId',
    question_text varchar2(20) path 'questiontext'
);

使问题文本变量的大小与您的数据一样大,当然,大概是为了匹配您现有的表结构 - 如果您想存储文本,那就是。

如果 XMLType 是表中的列,则可以通过连接传递它:

select x.*
from your_table
cross join xmltable('/QuestionCategory/questions/question'
  passing your_table.your_xmltype_column
  columns question_id number path 'questionId',
    question_text varchar2(20) path 'questiontext'
);

例如,对于一个固定的文档:

select *
from xmltable('/QuestionCategory/questions/question'
  passing xmltype('<QuestionCategory>
   <categoryId>
   </categoryId>
   <questions>
      <question>
        <questionId>1</questionId>
        <questiontext>abc</questiontext>
      </question>
      <question>
        <questionId>2</questionId>
        <questiontext>def</questiontext>
      </question>
      <question>
        <questionId>3</questionId>
        <questiontext>ghi</questiontext>
      </question>
   </questions>  
</QuestionCategory>')
  columns question_id number path 'questionId',
    question_text varchar2(20) path 'questiontext'
);

QUESTION_ID QUESTION_TEXT       
----------- --------------------
          1 abc                  
          2 def                  
          3 ghi                  

然后,您可以轻松地将其用作insert ... select构造的基础。

于 2015-02-26T16:02:34.653 回答