我正在开发一个项目,我必须编写一个存储过程,从HTTP,XML服务中检索数据。数据需要在表或游标中返回,以便客户端可以读取它。我已经做了一些工作,已经使用UTL_HTTP从服务中检索数据。我不知道该怎么做是将数据从XML转换为列和行。我一直在网上搜索并找到很多关于查询Oracle数据表并使用XMLElement返回XML的示例;但不是另一种方式。 谢谢!
答案 0 :(得分:1)
有几种方法可以做到这一点。
一种方法是编写一个解析器(可能使用不同的语言,如Perl或Java),将XML转换为INSERT语句。
在PL / SQL中,它看起来像这样:
your_xml := XMLType('<emp Id="1"><first>Peter</first><last>Fox</last></emp>');
insert into emp (empid, first_name, last_name)
select EXTRACTVALUE(your_xml, '/@Id'), EXTRACTVALUE(your_xml, '/first'), EXTRACTVALUE(your_xml, '/last')
from dual;
我知道在Oracle 11.2中已经弃用EXTRACTVALUE
但我只是想说明这个原则。
另一种方法是将整个XML文档保存到一个表(简单的INSERT语句)中,在该表中创建了一个数据类型为XMLTYPE
的列。然后使用搜索时找到的函数在此表上创建视图。使用INSTEAD OF TRIGGER
,还可以更新存储在表中的XML文档。