我有像这样的XMLTYPE
<QuestionCategory>
<categoryId>
</categoryid>
<questions>
<question>
<questionId>1</questionId>
<questiontext>abc</questiontext>
</question>
<question>
</question>
<question>
</question>
</questions>
</QuestionCategory>
我需要从这个XML中获取问题ID并将它们插入表中。 我怎样才能做到这一点。我试过通过'问题'节点循环。
答案 0 :(得分:0)
您可以使用an 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
构造的基础。