この記事は約5分53秒で読むことができます。

xmlを表示する

参考文献

125 DBMS_XMLDOM  
 

function fmt_xmlの作成

xml出力する際のfunction fmt_xmlを作成する。コンストで初期化しておくこと。XMLTYPEを引数にもらってCLOBで返却。

コード表示

CREATE OR REPLACE FUNCTION fmt_xml(p_xml XMLTYPE)
RETURN CLOB
AS fmtxml CLOB;
BEGIN
	fmtxml := to_clob(' ');
	dbms_xmldom.writetoclob(dbms_xmldom.makenode(dbms_xmldom.newdomdocument(p_xml)),fmtxml);
	RETURN fmtxml;
END;
/

function fmt_xmlのテストデータ

xmltypeハンディに作るとしたら、テーブルから生み出すぐらいだよなー。たぶん。pivot xml便利。for句の副問合せとしては何を指定してもかまいません。副問合せから戻される値は1つ1つ異なっている必要があります。distinct必須。

ピボットとアンピボット  
 
コード表示

drop table test___xml___ purge;
create table test___xml___ as
with sub as(
select
	S1.RCP_ID
	,S1.NM
	,S2.STF
from
	TEST___RCP___ s1
		inner join TEST___STF___ s2
			on
				S1.RCP_ID = S2.RCP_ID
)
select
	*
from
	sub pivot xml(max(nm) as nm for stf in (any))
;

AINE@pdb1> set lines 80
AINE@pdb1> desc test___xml___
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 RCP_ID                                             NUMBER
 STF_XML                                            SYS.XMLTYPE STORAGE BINARY

なんもしないとsqldeveloperだと型名だけでるよね

ツール>プリファレンス>データベース>拡張>グリッドのXML値の表示 にチェックしたけど、、sqlplusは普通に出る。

See the Pen
pYVyWb
by ukijumotahaneniarukenia (@brunohigashi)
on CodePen.


コード表示

select * from TEST___XML___;
AINE@pdb1> col stf_xml for a100
AINE@pdb1> select * from test___xml___;

sqldeveloperでも出すためにはファンクションをかます

でたぁー

See the Pen
pYVyWb
by ukijumotahaneniarukenia (@brunohigashi)
on CodePen.


コード表示

AINE@pdb1> col stf_xml for a100
AINE@pdb1> select RCP_ID,fmt_xml(STF_XML) as STF_XML from TEST___XML___;

Leave a Reply

Your email address will not be published. Required fields are marked *