您可以使用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
构造的基础。