zoukankan      html  css  js  c++  java
  • ORA-22828 输入样式或替换參数超过了32k限制大小

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

    ORA-22828: input pattern or replacement parameters 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 := '<resp>#result#</resp>';
      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 := '<resp>#result#</resp>';
      ret_cb := replace_with_clob(ret_cb, '#result#', cb); 
      dbms_output.put_line(substr(ret_cb, 1, 100));
    end;
    /
    

    运行成功!



    -----------------------------------

    Dylan    Presents.



  • 相关阅读:
    achivemq(消息队列)的使用
    java高并发当时处理的思路
    字符串的应用
    正则表达式
    文本文件的读取与写入
    继承
    冒泡排序法
    类与对象
    数据类型
    关键字和语句
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6729784.html
Copyright © 2011-2022 走看看