-
- 使用extract().getstringval()获取节点文本
- 使用extractValue获取文本
- 使用XMLTABLE获取节点值
使用extract().getstringval()获取节点文本
sql如下:
select extract(XMLTYPE(b.XMLVALUE), '//姓名//child::text()').ge服务器托管网tstringval()
from tab b
由于我这里的XMLVALUE是clob类型,所以先XMLTYPE(b.XMLVALUE) 是把XMLVALUE字段转为XMLTYPE类型。然后再通过extract().getstringval()获取节点文本,其中extract()得到的还是XMLTYPE类型,getstringval()则返回varchar。但是,如果内容不超过了4000,就会报错:
ORA-06502: PL/SQL: 数字或值错误 : character string buffer too small
ORA-06512: 在 "SYS.XMLTYPE", line 169
查看错误堆栈的程序源?
使用extractValue获取文本
使用extractValue的话,就可以一步,之前获取到节点的文本值,但是这个节点必须是末端的节点,否则就会报错。
sql如下:
select extractValue(XMLTYPE(b.XMLVALUE), '/EMRDoc') from tab b;
报错:
ORA-19025: EXTRACTVALUE 只返回一个节点的值。
正常使用extractValue获取节点值
select extractValue(XMLTYPE(b.XMLVALUE), '/EMRDoc/xm') from tab b;
如果内容不超过了4000,同样也会报错:
ORA-01706: 用户函数的结果值过大
使用XMLTABLE获取节点值
XMLTABLE()可以直接返回一个表,里面节点获取的值可以直接指定字段类型,所以就可以用clob装下超过4000文本。
select (sele服务器托管网ct NVL(dbms_lob.substr(text, 2000, 1), '99#')
from XMLTABLE('/EMRDoc/xm' PASSING XMLTYPE(b.XMLVALUE) COLUMNS text clob PATH
'/EMRDoc/xm'))
from tab b
如果需要同时获取多列,则
select t.*,b.xm,b1.xb,b1.nl,NVL(dbms_lob.substr(b.xm, 2000, 1), '99#')
from tab b,
XMLTABLE('/EMRDoc' PASSING XMLTYPE(b.XMLVALUE) COLUMNS xm clob PATH
'/EMRDoc/xm',
xb clob PATH '/EMRDoc/xb',
nl varchar(4000) PATH '/EMRDoc/nl') b1
效果如下:
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 前端学习笔记202310学习笔记第一百零玖天-vue3-链式调用&对象属性与遍历&this指向&caller_callee之24
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net 机房租用,北京机房租用,IDC机房托管, http://w服务器托管网ww.fwqtg.net服务器托管网相关推荐: linux使用top命令java进程占用65%内存和160%…