• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

ORA-22828 输入样式或替换参数超过了32k大小限制

mysql 搞代码 4年前 (2022-01-09) 31次浏览 已收录 0个评论

今天调试程序报以下错误: ORA-22828: input pattern or replacement parameters exceed 32K size limit22828. 00000 – input

今天调试程序报以下错误:

ORA-22828: input pattern or replacement parameter来@源gao*daima.com搞@代#码网s exceed 32K size limit
22828. 00000 – “input pattern or replacement parameters exceed 32K size limit”
*Cause: Value provided for the pattern or replacement string in the form of
VARCHAR2 or CLOB for LOB SQL functions exceeded the 32K size limit.
*Action: Use a shorter pattern or process a long pattern string in multiple
passes.

可用以下脚本重现:

declare
cb clob;
ret_cb CLOB;
begin
cb := rpad(‘x’, 32767, ‘x’)||’x’;
ret_cb := ‘#result#’;
ret_cb := replace(ret_cb, ‘#result#’, cb);
end;
/

解决方式如下:

编写函数:

create or replace function replace_with_clob
(i_source in clob
,i_search in varchar2
,i_replace in clob
) return clob is
l_pos pls_integer;
begin
l_pos := instr(i_source, i_search);
if l_pos > 0 then
return substr(i_source, 1, l_pos-1)
|| i_replace
|| substr(i_source, l_pos+length(i_search));
end if;
return i_source;
end replace_with_clob;

改写后:

declare
cb clob;
ret_cb CLOB;
begin
cb := rpad(‘x’, 32767, ‘x’)||’x’;
ret_cb := ‘#result#’;
ret_cb := replace_with_clob(ret_cb, ‘#result#’, cb);
dbms_output.put_line(substr(ret_cb, 1, 100));
end;
/

执行成功!

———————————–

Dylan Presents.

本文永久更新链接地址


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ORA-22828 输入样式或替换参数超过了32k大小限制

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址