日期:2014-05-16  浏览次数:21086 次

Clob字段中字符替换求助(注意,大于32K)
我需要替换一个clob字段中的部分字符串,然后在网上找了个存储过程,如下:
CREATE OR REPLACE PROCEDURE CATAN.replaceClob_new (
srcClob IN CLOB,
replaceStr IN VARCHAR2,
replaceWith IN VARCHAR2,
newClob OUT CLOB

IS
 
vBuffer VARCHAR2 (32767);
l_amount BINARY_INTEGER := 32767;
l_pos PLS_INTEGER := 1;
l_clob_len PLS_INTEGER;
 
   
BEGIN
  newClob := EMPTY_CLOB;
  -- initalize the new clob
  
   
 dbms_lob.createtemporary(newClob,TRUE);
 --newClob := EMPTY_CLOB;
 --srcClob := EMPTY_CLOB;
 l_clob_len := dbms_lob.getlength(srcClob);
 
 WHILE l_pos < l_clob_len
  LOOP
  dbms_lob.read(srcClob, l_amount, l_pos, vBuffer);
 
  IF vBuffer IS NOT NULL THEN
  -- replace the text
  vBuffer := replace(vBuffer, replaceStr, replaceWith);
  -- write it to the new clob
  dbms_lob.writeappend(newClob, LENGTH(vBuffer), vBuffer);
  END IF;
  l_pos := l_pos + l_amount;
  END LOOP;
 

EXCEPTION
  WHEN OTHERS THEN
  RAISE;
END;
/


然后测试了一下,对于小于32k(32767)的clob字段,可以正常工作,但是一旦大于32k,这个存储过程似乎就不行了,超出了buffer的范围,请教各位大侠有何办法解决?


------解决方案--------------------
o,dbms_lob没有replace方法。你把l_amount的值改为20000试试。