XMLの要素の順序にて取得する技(Oracle XML_DB) ちゃんとした版
はい、大分遅れましたが<a href="http://forthclover.blog56.fc2.com/blog-entry-132.html" target="_blank">以前にいっていた内容</a>をちゃんとのせます。
データとしては以前の<a href="http://forthclover.blog56.fc2.com/blog-entry-129.html" target="_blank">この記事</a>を参考にさせていただきたいと思います。
select
extractvalue(value(compInfo), '/会社情報/会社/社名') as 会社名,
extractvalue(value(detail), '/詳細/text()') as 事業内容詳細
from
会社情報XMLテーブル compInfo,
table(xmlsequence(extract(value(compInfo), '/会社情報/会社/事業内容/タイトル/詳細'))(+) detail
と同様として、かつ事業内容詳細ごとに順序を付けたい場合には、
select
company_t.name,
activity_t.seq_no,
activity_t.detail
from
会社情報XMLテーブル compInfo,
,XMLTable(
'/会社情報'
PASSING compInfo.Object_value
COLUMNS
name VARCHAR2(255) PATH '/会社情報/会社/社名/text()',
activity_xml XMLType PATH '/会社情報/会社/事業内容/タイトル/詳細'
) AS company_t
,XMLTable(
'/詳細'
PASSING compInfo.Object_value
COLUMNS
SEQ_NO FOR ORDINALITY,
detail VARCHAR2(255) PATH '/詳細/text()'
)(+) AS activity_t
これで期待する結果としては、
株式会社エクスブリッジ | 1 | トリプルコストダウン戦略 ・中国オフショア開発 ・オープンソースソフトウェア ・コンポーネント指向 |
株式会社エクスブリッジ | 1 | ■事業部門向けソリューション AURORA 基幹.EAI ソリューション - 販売管理系 見積,受注,売上,出荷モジュール - 購買管理系 依頼,発注,仕入,入荷モジュール - 在庫管理系 入庫,出庫,在庫モジュール ?必要なモジュールのみを選択 ?モジュールを自由にカスタマイズ ?財務会計・EDIなどとの連動 |
株式会社エクスブリッジ | 2 | ■総務部門向けソリューション AURORA 総務.EAI ソリューション 勤怠管理,備品管理,施設設備予約, 経費精算,社内ファイル便, 伝言管理,etc... |
株式会社エクスブリッジ | 3 | ■経営陣向けソリューション OLAP/BIによる経営情報分析 AURORA 基幹.EAIに蓄積された「売上」「仕入」データを分析するための仕組みを構築し、 「顧客分析(CRM)」「商品分析(MD)」のノウハウを提供 - OpenOLAP(オープンソース) - New WorkFRIEND(JBCC) ポータル(CMS)による知識経営 CMSによる社内ポータル,コミュニティサイト構築を支援し、 ナレッジマネージメントを成功に導きます 得意先との知識・情報共有、社員間における 知識・情報共有を効率的に実現し、ナレッジを 有効に活用する経営を支援します |
となるはずです。
はずってのが実行していないからってことでの保障です。
ちょっとXML_DBと真剣に向き合えばわかりやすくはなりますが、
XMLTable(
'/会社情報'
PASSING compInfo.Object_value
COLUMNS
name VARCHAR2(255) PATH '/会社情報/会社/社名/text()',
activity_xml XMLType PATH '/会社情報/会社/事業内容/タイトル/詳細'
) AS company_t
のかしょで、
PATH '/会社情報/会社/事業内容/タイトル/詳細'をXMLType列として定義します。
ここでポイントは対象としているのが
「
'/会社情報'
PASSING compInfo.Object_value
」
ですので、1つのobject_valueつまりは1つのXMLの集まりの中には
PATH '/会社情報/会社/事業内容/タイトル/詳細'が複数存在することになり、
1行に複数件数の該当があるという形になりますので、
1回目のXMLTable無いでは「XMLType列」とします。
そして2回目のXMLTableでは、1回目に指定した「XMLType列」とした「activity_xml」を元にしており、このときには
XMLType列の値として、
『
<詳細>
トリプルコストダウン戦略
・中国オフショア開発
・オープンソースソフトウェア
・コンポーネント指向
</詳細>
』
『
<詳細>
■事業部門向けソリューション
AURORA 基幹.EAI ソリューション
- 販売管理系
見積,受注,売上,出荷モジュール
- 購買管理系
依頼,発注,仕入,入荷モジュール
- 在庫管理系
入庫,出庫,在庫モジュール
?必要なモジュールのみを選択
?モジュールを自由にカスタマイズ
?財務会計・EDIなどとの連動
</詳細>
<詳細>
■総務部門向けソリューション
AURORA 総務.EAI ソリューション
勤怠管理,備品管理,施設設備予約,
経費精算,社内ファイル便,
伝言管理,etc...
</詳細>
<詳細>
■経営陣向けソリューション
OLAP/BIによる経営情報分析
AURORA 基幹.EAIに蓄積された「売上」「仕入」データを分析するための仕組みを構築し、
「顧客分析(CRM)」「商品分析(MD)」のノウハウを提供
- OpenOLAP(オープンソース)
- New WorkFRIEND(JBCC)
ポータル(CMS)による知識経営
CMSによる社内ポータル,コミュニティサイト構築を支援し、
ナレッジマネージメントを成功に導きます
得意先との知識・情報共有、社員間における
知識・情報共有を効率的に実現し、ナレッジを
有効に活用する経営を支援します
</詳細>
』
の2行分が入っており、それぞれの行にて「<詳細> </詳細> 」の中身を返す形になります。
判りにくいようであれば、
select
company_t.*
from
会社情報XMLテーブル compInfo,
,XMLTable(
'/会社情報'
PASSING compInfo.Object_value
COLUMNS
name VARCHAR2(255) PATH '/会社情報/会社/社名/text()',
activity_xml XMLType PATH '/会社情報/会社/事業内容/タイトル/詳細'
) AS company_t
を実行してみてください。
結果として
株式会社エクスブリッジ | <詳細> トリプルコストダウン戦略 ・中国オフショア開発 ・オープンソースソフトウェア ・コンポーネント指向 </詳細> |
株式会社エクスブリッジ | <詳細> ■事業部門向けソリューション AURORA 基幹.EAI ソリューション - 販売管理系 見積,受注,売上,出荷モジュール - 購買管理系 依頼,発注,仕入,入荷モジュール - 在庫管理系 入庫,出庫,在庫モジュール ?必要なモジュールのみを選択 ?モジュールを自由にカスタマイズ ?財務会計・EDIなどとの連動 </詳細> <詳細> ■総務部門向けソリューション AURORA 総務.EAI ソリューション 勤怠管理,備品管理,施設設備予約, 経費精算,社内ファイル便, 伝言管理,etc... </詳細> <詳細> ■経営陣向けソリューション OLAP/BIによる経営情報分析 AURORA 基幹.EAIに蓄積された「売上」「仕入」データを分析するための仕組みを構築し、 「顧客分析(CRM)」「商品分析(MD)」のノウハウを提供 - OpenOLAP(オープンソース) - New WorkFRIEND(JBCC) ポータル(CMS)による知識経営 CMSによる社内ポータル,コミュニティサイト構築を支援し、 ナレッジマネージメントを成功に導きます 得意先との知識・情報共有、社員間における 知識・情報共有を効率的に実現し、ナレッジを 有効に活用する経営を支援します </詳細> |
となるはずですよ。
何だかめっちゃ崩れていたのをとりあえず直しました(^_^;)
参考にしていただけた方にはご迷惑をおかけいたしました。