oracle解析xml(如何将Oracle查询结果转成XML文件)

本文目录
- 如何将Oracle查询结果转成XML文件
- 求Oracle使用EXTRACTVALUE函数解析XML的使用方法,谢谢啦
- 高分求教,Oracle 解析Pivot 生成的XML转为table,满意之后再加分
- oracle 获取xml某个节点的值
如何将Oracle查询结果转成XML文件
在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》
求Oracle使用EXTRACTVALUE函数解析XML的使用方法,谢谢啦
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’),
extractvalue(xmltype(c_cml),’/PurchaseOrder/DataElement’),
id
from aa;
高分求教,Oracle 解析Pivot 生成的XML转为table,满意之后再加分
create or replace procedure ljz_pivot_xml_sp(pi_table_name varchar2,
pi_column_name varchar2,
pi_create_table varchar2) as
v_column nvarchar2(50);
v_count number := 0;
v_i number;
v_parent_node nvarchar2(4000);
v_child_node nvarchar2(4000);
v_over boolean := false;
v_tmp nvarchar2(50);
v_existsnode number;
v_sql clob;
v_name varchar2(30);
v_name_xml xmltype;
begin
v_sql := ’select x.* from ’ || pi_table_name ||
’ a, xmltable(’’/PivotSet’’ passing a.’ ||
pi_column_name || ’ columns ’;
v_parent_node := ’/PivotSet’;
v_child_node := ’item’;
v_i := 1;
execute immediate ’select ’ || pi_column_name || ’ from ’ ||
pi_table_name || ’ where rownum=1’
into v_name_xml;
select existsnode(v_name_xml,
’/PivotSet/item’)
into v_existsnode
from dual;
while v_existsnode = 1 loop
execute immediate ’select substr(extractvalue(’ || pi_column_name ||
’, ’’/PivotSet/item’’),1,30)
from ’ || pi_table_name || ’ x’
into v_name;
v_sql := v_sql || ’"’ || v_name || ’" varchar2(30) path ’’item[’ ||
to_char(v_i) || ’]/column’’,’;
v_i := v_i + 1;
select existsnode(v_name_xml,
’/PivotSet/item’)
into v_existsnode
from dual;
end loop;
v_sql := trim(’,’ from v_sql) || ’) x’;
commit;
select count(1)
into v_count
from user_tab_columns
where table_name = upper(pi_create_table);
if v_count = 0 then
execute immediate ’create table ’ || pi_create_table || ’ as ’ || v_sql;
end if;
end;
调用方法:
begin
ljz_pivot_xml_sp(’(select * from (select deptno,sal from emp) pivot xml(sum(sal) for deptno in(any)))’,
’deptno_xml’,
’ljz_pivot_tmp’);
end;
***隐藏网址***
oracle 获取xml某个节点的值
用XPath比较简单点.也可以用xmldom.
xmltype(’《?xml version="1.0" encoding="gbk"?》
《SERVICE》
《IDA_SVR_USERBILL》
《CALL_METHOD》queryProcessStepList《/CALL_METHOD》
《/IDA_SVR_USERBILL》
《/SERVICE》’).extract(’//CALL_METHOD/child::text()’).getstringval()
测试:
SELECT xmltype(’《?xml version="1.0" encoding="gbk"?》
《SERVICE》
《IDA_SVR_USERBILL》
《CALL_METHOD》queryProcessStepList《/CALL_METHOD》
《/IDA_SVR_USERBILL》
《/SERVICE》’).extract(’//CALL_METHOD/child::text()’).getstringval()
from dual;

更多文章:
he agreed to help(用need to do sth.和agree to do sth. 造句)
2026年8月31日 01:00
instr函数的返回值(关于vb中InStr函数的一个小问题)
2026年1月26日 22:30
slcp是什么意思(matlab.*和matlab. s有什么区别)
2026年1月3日 12:00
db2数据库update后想恢复(你好,SQL修改错了,修改前没有备份,请问怎么还原到修改前的数据,你知道吗可以给联系方式我请教一下)
2026年9月17日 12:00
assert python用法(python:assert_raises() 怎么用啊,有哪些参数 请说得详细些,先谢谢了!)
2026年7月11日 08:30
this is it歌词好诡异(Turn The Lights On的歌词翻译)
2025年7月26日 02:30
tabletennis安卓游戏(table tennis touch多人游戏时提示game center断开链接怎么解决)
2025年8月8日 17:15
迷你qq头像(2021头像可爱呆萌男生,寻找一些头像小男孩的那种)
2026年2月14日 13:00












