2

Oracle 11g データベースに格納されている XML タイプのデータがあります。私のデータの大ざっぱなバージョンは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<record>
<record_number>12345</record_number>
<record_type> book </record_type>
</record>

次のようなデータ操作関数:

SELECT XML_Type FROM Metadata

各行が適切にフォーマットされた XML ファイル (多くのタグと要素を含む) を含む列を指定します。<record_type>各要素の出現回数を抽出してカウントするのに苦労しています。たとえば、XML タグ<record_type>に「book」、「article」などの要素が何回含まれているか知りたいのですが、タグに関連付けられている要素の全リストはわかりません。

ありがとう、

私。

4

1 に答える 1

3

データがどのように保存されているかによって異なります (つまり、テーブルに 1 つの行があり、投稿したサンプルのように見える 1 つの XML ドキュメントであるか、テーブルに 1 つの行があり、多くの異なるレコード タグを持つ 1 つの XML ドキュメントです)。それ)最も簡単なアプローチは次のようなものです

SQL> ed
Wrote file afiedt.buf

  1  with t as (select '<?xml version="1.0" encoding="UTF-8"?>
  2                     <record>
  3                       <record_number>12345</record_number>
  4                       <record_type> book </record_type>
  5                     </record>' xml
  6                from dual
  7              union all
  8              select '<?xml version="1.0" encoding="UTF-8"?>
  9                        <record>
 10                           <record_number>6789</record_number>
 11                           <record_type> magazine </record_type>
 12                        </record>' xml
 13                 from dual)
 14  select xmltype(t.xml).extract( '//record_number/text()' ) record_number,
 15         xmltype(t.xml).extract( '//record_type/text()' ) record_type
 16*   from t
SQL> /

RECORD_NUMBER        RECORD_TYPE
-------------------- ------------------------------
12345                 book
6789                  magazine

データを抽出したら、データを数えたり集計したりするのは簡単です。

于 2012-06-19T17:22:00.297 に答える