小工具知识网

当前位置: 首页 > 行业知识 > oracle使用正则表达式REGEXP

行业知识

oracle使用正则表达式REGEXP

2026-10-31 00:49:14 来源:互联网转载

使���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;

上一篇:【优质书籍推荐】Node.js+MongoDB+Vue.js全栈开发实战

下一篇:天下手游服务器怎么选区?