为了账号安全,请及时绑定邮箱和手机立即绑定

oracle怎么把数据库中的字段转化成指定的xml格式?

/ 猿问

oracle怎么把数据库中的字段转化成指定的xml格式?

oracle怎么把数据库中的字段转化成指定的xml格式


查看完整描述

3 回答

?
慕田峪4524236

在oracle中提供了许多内置的程序包,它们用于扩展数据库的功能。在开发应用程序时,可以利用这些程序包。数据库用户sys拥有oracle提供的所有程序包。他们被定义为共有同义词,并将执行权限授予了public用户组,任何用户都可以访问它们。其中DBMS_XMLQUERY包用于将查询结果转换为XML格式,DBMS_LOB程序包包含雨处理大型对象的过程和函数。下面我们看一下DBMS_XMLQUERY和DBMS_LOB的用法:
SQL> DECLARE
result CLOB;
xmlstr VARCHAR2(32767);
line VARCHAR2(2000);
line_no INTEGER :=1;
BEGIN
result :=DBMS_XMLQUERY.getXml('select empno,empname from employee');
xmlstr :=DBMS_LOB.SUBSTR(result,32767);
LOOP
EXIT WHEN xmlstr IS NULL;
line :=SUBSTR(xmlstr,1,INSTR(xmlstr,CHR(10)-1));
DBMS_OUTPUT.PUT_LINE(line_no || ':' || line);
xmlstr :=SUBSTR(xmlstr,INSTR(xmlstr,CHR(10)+1));
line_no :=line_no + 1;
END LOOP;
END;

在上面的例子中我们声明了一个CLOB数据类型的result变量,以及VARCHAR2类型的xmlstr和line两个变量。其中,getXml函数用于将查询结果转换为XML格式,SUBSTR函数检索子字符串,32767值指定要从CLOB数据类型读取的最大字节数。检索到的字符串存储xmlstr变量中。LOOP块循环执行,每次从xmlstr中读取一行。INSTR函数返回一个字符串在另一个字符串首次出现的位置。在此,该函数返回换行符在字符串中的位置,直到遇到下一行。

大家觉得例子的结果能不能读出我们预期的结果呢?试试就知道了!!!

结果如下:

< ?xml version='1.0'?>
< ROWSET>
< ROW num="1">
< EMPNO>E001</EMPNO>
< EMPNAME>Jane</EMPNAME>
< /ROW>
<ROW num="2">
< EMPNO>E002</EMPNO>
< EMPNAME>John</EMPNAME>
< /ROW>
< ROW num="3">
< EMPNO>E003</EMPNO>
< EMPNAME>Joe</EMPNAME>
< /ROW>
< /ROWSET>



查看完整回答
反对 回复 2019-05-26
?
蛊毒传说

1:创建表
create table AA(id number,c_cml clob);
2:插入字段
insert into aa values(1,to_clob('<PurchaseOrder>
<DataElement name="member_id">90558976001</DataElement>
<DataElement name="hicn">509488308A</DataElement>
<DataElement name="EID">285320</DataElement>
</PurchaseOrder>'));

3:查询
select extractvalue(xmltype(c_cml),'/PurchaseOrder/DataElement[@name="member_id"]'),
extractvalue(xmltype(c_cml),'/PurchaseOrder/DataElement[@name="hicn"]'),
id
from aa;

查看完整回答
反对 回复 2019-05-26
?
翻阅古今

不知道您的clob是否定义成XMLTYPE,如果是,那很简单,只需要用extract(“节点路径”)就可以得到节点的值。如果clob定义的是CLOB类型,那么需要用XMLTYPE转换,然后再用extract得到节点的值。下面是我用过的一个例子,我的clob定义的是CLOB的类型,您可以相应地构建您自己的query:
select (xmltype(CITATION)).extract('/MedlineCitation/PMID/text()').getStringVal() as PMID from medline_owner.medline_data where CREATE_DATE > to_date('04-04-2010', 'dd-MM-yyyy')

查看完整回答
反对 回复 2019-05-26

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信