2016-04-28 10 views
1

clob内のn番目のデータのリストを取得するにはどうすればよいですか? CLOBのclob内の値リストの取得

例:

<bank> 
    <bankDetails> 
     <bankDetailsList> 
      <pk>1</pk> 
      <accountName> 
       <asCurrent>EDGARS LESOTHO</asCurrent> 
      </accountName>   
      <bankAccountType> 
       <asCurrent>CURR</asCurrent> 
      </bankAccountType> 
     </bankDetailsList> 
     <bankDetailsList> 
      <pk>2</pk> 
      <accountName> 
       <asCurrent>EDGARS LESOTHO 2</asCurrent> 
      </accountName> 
      <bankAccountType> 
       <asCurrent>CURR</asCurrent> 
      </bankAccountType> 
     </bankDetailsList> 
    </bankDetails> 
</bank> 

だから私はCLOBに発生し、このアカウント名のn番目のリストまであるかもしれないと仮定すると、SQLのアカウント名のすべての値を取得したいと思います。

私はOracle 11gとSqlDeveloperを使用しています。4.1.3 ご回答いただきありがとうございます。

答えて

1
SELECT EXTRACTVALUE(v.COLUMN_VALUE, '/asCurrent') 
FROM table_name t, 
     TABLE(
     XMLSequence(
      EXTRACT(
      XMLType(t.clob_column), 
      '/bank/bankDetails/bankDetailsList/accountName/asCurrent' 
      ) 
     ) 
     ) v 
+0

v.column_valueとは何ですか? – Chebaz

+0

@Chebaz 'TABLE()'テーブル関数を使用すると、カラムのエイリアスを返して 'COLUMN_VALUE'に戻ります。したがって、' v.COLUMN_VALUE'は、XPath '/ bank/bankDetails/bankDetailsList/accountName/asCurrent'が一致しました。 – MT0

+0

ありがとう、私はそれが働いている。あなたは本当に私の一日を救った。 – Chebaz

0
SELECT level as rnk, regexp_substr(t.clob_column, 
      '<accountName>[^<]*?<asCurrent>([^<]*?)<', 1, level, null, 1) as acct_name 
FROM t 
CONNECT BY level <= (select regexp_count(clob_column, '<accountName>') FROM t); 

トンは、(私のテストケースでは、表1行1列、元のポスト内の1つである値を有する)テーブル名とclob_columnはCLOB値を持つ列です。

クローブ値の列があり、これを複数の値に対して同時に実行する必要がある場合は、これを少し修正する必要があります。要件を明確にして、そこから取り除くことができます。

ADDED:複数行で動作させるには、CONNECT BY LEVEL句を変更する必要があります。各行がそれ自身を参照するだけでよいようにします。サイクルに関する問題を回避するには、さらに条件を1つ追加する必要があります。このように:

... 
CONNECT BY level <= (select regexp_count(clob_column, '<accountName>') FROM t) 
     and clob_column= prior clob_column 
     and prior sys_guid() is not null; 
+0

正規表現はXHTMLから特定の限定されたデータを取得することができますが、非常に壊れやすく[一般的なXHTMLパーサとしては機能しません](http://stackoverflow.com/q/1732348/1509264)。あなたは、このような 'ない有効な EDGARS LESOTHOのようにしたい1前の任意のネストされた要素を、'持っているように、ソースデータが変更された場合、例えば、これは間違った値を返します。 。 – MT0

+0

私はclob値の列を持っているので、私はこのclob値を持つ何千もの行を持っているので、これを同時に行う必要があります。 – Chebaz

+0

迅速な対応をありがとう、上記のMT0のクエリは上手く動作しています。 – Chebaz

関連する問題