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
。