sql >> Database teknologi >  >> RDS >> Oracle

Sådan ringer du til REPLACE med CLOB (uden at overstige 32K)

Her er et groft første udkast til en funktion, der vil gøre arbejdet med visse begrænsninger, den er ikke blevet særlig godt testet endnu:

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;

Den erstatter kun en enkelt forekomst af søgeordet.

declare
  v2 varchar2(32767);
  cl_small clob;
  cl_big clob;
  cl_big2 clob;
begin
  v2 := rpad('x', 32767, 'x');
  dbms_output.put_line('v2:' || length(v2));
  cl_small := v2;
  dbms_output.put_line('cl_small:' || length(cl_small));
  cl_big := v2 || 'y' || v2;
  dbms_output.put_line('cl_big[1]:' || length(cl_big));
  cl_big2 := replace(cl_big, 'y', cl_small);
  dbms_output.put_line('cl_big[2]:' || length(cl_big2));
  cl_big2 := replace_with_clob(cl_big, 'y', cl_big); 
  dbms_output.put_line('cl_big[3]:' || length(cl_big2));
end;
/

v2:32767
cl_small:32767
cl_big[1]:65535
cl_big[2]:98301
cl_big[3]:131069


  1. Sådan laver du sql-tuning i Oracle

  2. Flere Venstre Slut med sum

  3. Postgres - Flere joinforbindelser får min forespørgsel til at returnere forkerte data

  4. Forsøger at installere innodb memcached plugin MySQL5.6.17 på ubuntu 14.04