Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak wywołać REPLACE z CLOB (bez przekraczania 32K)

Oto wstępny pierwszy szkic funkcji, która wykona zadanie z pewnymi ograniczeniami, nie została jeszcze dobrze przetestowana:

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;

Zamienia tylko raz w pierwszym wystąpieniu wyszukiwanego terminu.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać prawe 10 miejsc sznurka w wyroczni?

  2. Jak formatować liczby ujemne za pomocą nawiasów kątowych w Oracle

  3. Jak zastąpić nową linię w Oracle

  4. Używanie podzapytania w instrukcji Check w Oracle

  5. Jaki jest odpowiednik varchar(max) w Oracle?