oracle使用正则表达式REGEXP
使用extract(XMLTYPE(XML), ‘xphat’).getstringval()提取XML,长度过长存在报错
(图片来源网络,侵删)
ORA-06502: PL/SQL: 数字或值错误 : character string buffer too small
ORA-06512: 在 “SYS.XMLTYPE”, line 169
并且存在速度较慢等问题。
正则提取XML,由于这边的XML文本中Name标签,接着的标签即为Value的值,故这样去写。其它的格式需要改正则表达式。
其中
([0-9]+(\.[0-9]{1,2})?)
为数字提取。
(图片来源网络,侵删)
Result :=SUBSTR(re, 1, 4000); Result :=substrb(Result,1,4000);
为截取4000长度的字符串。
create or replace function pyzyyhis6.mc_fn_reg_xml(reg_xml in clob,reg_name in varchar2,reg_re varchar2) return varchar2 is Result varchar2(20000); re clob; begin --正则提取xml --reg_xml clob 传入的xml --reg_name varchar2 传入的节点名称 --reg_re varchar2 返回数值的正则规则(数字传"[0-9]+(\.[0-9]{1,2})?"之类的,否则传 [^]+) --作者:ltd IF reg_re='1' then --数字 re := REGEXP_SUBSTR(reg_xml, '('||reg_name||')([0-9]+(\.[0-9]{1,2})?)',1,1,'c',2); ELSIF reg_re='0' then --正常数值 re := REGEXP_SUBSTR(reg_xml, '('||reg_name||')([^]+)',1,1,'c',2); else re := REGEXP_SUBSTR(reg_xml, '('||reg_name||')('||reg_re||')',1,1,'c',2); end if; Result :=SUBSTR(re, 1, 4000); Result :=substrb(Result,1,4000); return Result; end;
(图片来源网络,侵删)
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...