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.



  • 相关阅读:
    图解Eclipse中配置Maven并创建Maven的Web工程
    Bzoj1922: [Sdoi2010]大陆争霸
    Bzoj2007: [Noi2010]海拔
    Bzoj5212: [Zjoi2018]历史
    NOIP2017:列队
    NOIP2017:逛公园
    CF908D New Year and Arbitrary Arrangement
    HDU4652:Dice
    HDU4336:Card Collector(min-max容斥)
    [NOI2017]游戏
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6729784.html
Copyright © 2011-2022 走看看