29: temp_clob_len NUMBER := 0;
30: dest_lob_len NUMBER := 0;
31:
32: BEGIN
33: IF DBMS_LOB.ISOPEN(P_LOB) = 0 THEN
34: NULL;
35: END IF;
36: DBMS_LOB.CREATETEMPORARY(temp_clob,TRUE,DBMS_LOB.SESSION);
37: LOOP
32: BEGIN
33: IF DBMS_LOB.ISOPEN(P_LOB) = 0 THEN
34: NULL;
35: END IF;
36: DBMS_LOB.CREATETEMPORARY(temp_clob,TRUE,DBMS_LOB.SESSION);
37: LOOP
38: end_offset := DBMS_LOB.INSTR(P_LOB,P_WHAT,1,occurence);
39: IF end_offset = 0 THEN
40: temp_clob_len := DBMS_LOB.GETLENGTH(temp_clob);
34: NULL;
35: END IF;
36: DBMS_LOB.CREATETEMPORARY(temp_clob,TRUE,DBMS_LOB.SESSION);
37: LOOP
38: end_offset := DBMS_LOB.INSTR(P_LOB,P_WHAT,1,occurence);
39: IF end_offset = 0 THEN
40: temp_clob_len := DBMS_LOB.GETLENGTH(temp_clob);
41: dest_lob_len := DBMS_LOB.GETLENGTH(P_LOB) - start_offset + 1;
42: IF dest_lob_len > 0 THEN
36: DBMS_LOB.CREATETEMPORARY(temp_clob,TRUE,DBMS_LOB.SESSION);
37: LOOP
38: end_offset := DBMS_LOB.INSTR(P_LOB,P_WHAT,1,occurence);
39: IF end_offset = 0 THEN
40: temp_clob_len := DBMS_LOB.GETLENGTH(temp_clob);
41: dest_lob_len := DBMS_LOB.GETLENGTH(P_LOB) - start_offset + 1;
42: IF dest_lob_len > 0 THEN
43: DBMS_LOB.COPY(temp_clob,P_LOB,dest_lob_len,temp_clob_len+1,start_offset);
44: END IF;
37: LOOP
38: end_offset := DBMS_LOB.INSTR(P_LOB,P_WHAT,1,occurence);
39: IF end_offset = 0 THEN
40: temp_clob_len := DBMS_LOB.GETLENGTH(temp_clob);
41: dest_lob_len := DBMS_LOB.GETLENGTH(P_LOB) - start_offset + 1;
42: IF dest_lob_len > 0 THEN
43: DBMS_LOB.COPY(temp_clob,P_LOB,dest_lob_len,temp_clob_len+1,start_offset);
44: END IF;
45: EXIT;
39: IF end_offset = 0 THEN
40: temp_clob_len := DBMS_LOB.GETLENGTH(temp_clob);
41: dest_lob_len := DBMS_LOB.GETLENGTH(P_LOB) - start_offset + 1;
42: IF dest_lob_len > 0 THEN
43: DBMS_LOB.COPY(temp_clob,P_LOB,dest_lob_len,temp_clob_len+1,start_offset);
44: END IF;
45: EXIT;
46: END IF;
47: temp_clob_len := DBMS_LOB.GETLENGTH(temp_clob);
43: DBMS_LOB.COPY(temp_clob,P_LOB,dest_lob_len,temp_clob_len+1,start_offset);
44: END IF;
45: EXIT;
46: END IF;
47: temp_clob_len := DBMS_LOB.GETLENGTH(temp_clob);
48: IF (end_offset - start_offset) > 0 THEN
49: DBMS_LOB.COPY(temp_clob,P_LOB,(end_offset - start_offset),temp_clob_len+1,start_offset);
50: END IF;
51: start_offset := end_offset + LENGTH(P_WHAT);
45: EXIT;
46: END IF;
47: temp_clob_len := DBMS_LOB.GETLENGTH(temp_clob);
48: IF (end_offset - start_offset) > 0 THEN
49: DBMS_LOB.COPY(temp_clob,P_LOB,(end_offset - start_offset),temp_clob_len+1,start_offset);
50: END IF;
51: start_offset := end_offset + LENGTH(P_WHAT);
52: occurence := occurence + 1;
53: IF P_WITH IS NOT NULL THEN
50: END IF;
51: start_offset := end_offset + LENGTH(P_WHAT);
52: occurence := occurence + 1;
53: IF P_WITH IS NOT NULL THEN
54: DBMS_LOB.WRITEAPPEND(temp_clob,replace_str_len,P_WITH);
55: END IF;
56: END LOOP;
57: IF LENGTH(P_WHAT) > LENGTH(P_WITH) THEN
58: DBMS_LOB.TRIM(P_LOB,DBMS_LOB.GETLENGTH(temp_clob));
54: DBMS_LOB.WRITEAPPEND(temp_clob,replace_str_len,P_WITH);
55: END IF;
56: END LOOP;
57: IF LENGTH(P_WHAT) > LENGTH(P_WITH) THEN
58: DBMS_LOB.TRIM(P_LOB,DBMS_LOB.GETLENGTH(temp_clob));
59: END IF;
60: -- DBMS_LOB.COPY(dest_lob,temp_clob,DBMS_LOB.GETLENGTH(temp_clob),1,1);
61: RETURN temp_clob;
62:
56: END LOOP;
57: IF LENGTH(P_WHAT) > LENGTH(P_WITH) THEN
58: DBMS_LOB.TRIM(P_LOB,DBMS_LOB.GETLENGTH(temp_clob));
59: END IF;
60: -- DBMS_LOB.COPY(dest_lob,temp_clob,DBMS_LOB.GETLENGTH(temp_clob),1,1);
61: RETURN temp_clob;
62:
63: END;
64: