यहां कोड का एक टुकड़ा है जो काम करता है। मेरा सुझाव है कि आप प्रदर्शन के उद्देश्य के लिए निहित वाले (FOR i IN (select...)) के बजाय स्पष्ट कर्सर का उपयोग करें।
टेस्टकेस बनाने के लिए सबसे पहले यहां स्क्रिप्ट है।
create table test (c clob);
insert into test (c) values (
'azertyuiop
qsdfghjklm
wxcvbn
');
फिर लाइन क्लॉब द्वारा लाइन पढ़ने की स्क्रिप्ट यहां दी गई है:
/* Formatted on 28/08/2012 14:16:52 (QP5 v5.115.810.9015) */
declare
nStartIndex number := 1;
nEndIndex number := 1;
nLineIndex number := 0;
vLine varchar2(2000);
cursor c_clob is
select c from test;
c clob;
-------------------------------
procedure printout
(p_clob in out nocopy clob) is
offset number := 1;
amount number := 32767;
len number := dbms_lob.getlength(p_clob);
lc_buffer varchar2(32767);
i pls_integer := 1;
begin
if ( dbms_lob.isopen(p_clob) != 1 ) then
dbms_lob.open(p_clob, 0);
end if;
amount := instr(p_clob, chr(10), offset);
while ( offset < len )
loop
dbms_lob.read(p_clob, amount, offset, lc_buffer);
dbms_output.put_line('Line #'||i||':'||lc_buffer);
offset := offset + amount;
i := i + 1;
end loop;
if ( dbms_lob.isopen(p_clob) = 1 ) then
dbms_lob.close(p_clob);
end if;
exception
when others then
dbms_output.put_line('Error : '||sqlerrm);
end printout;
---------------------------
begin
dbms_output.put_line('-----------');
open c_clob;
loop
fetch c_clob into c;
exit when c_clob%notfound;
printout(c);
end loop;
close c_clob;
end;
'राशि' चर का उपयोग लाइन स्थिति के अंत का पता लगाने के लिए किया जाता है। सावधान रहें, कुछ मामलों में लाइन का अंत CHR(10)||CHR(13) (CR + LF) होता है, और कुछ अन्य मामलों में यह केवल CHR(10) होता है।