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 に答える