Bugfix add1xml
When the length of p_xml would be an exact multitude of 4000 the loop over chunks would execute one time too much, causing "ORA-06502: PLSQL: numeric of value error: invalid LOB locator specified: ORA-22275", because the second part of dbms_lob.append would be NULL. A check is added on the length of the clob and if if the mod of 4000 is zero, we decrease the amount of loops by one.
This commit is contained in:
parent
a7d8f9e34e
commit
ae8f2d2058
@ -781,11 +781,18 @@ as
|
|||||||
)
|
)
|
||||||
is
|
is
|
||||||
t_tmp blob;
|
t_tmp blob;
|
||||||
|
l_count binary_integer;
|
||||||
begin
|
begin
|
||||||
dbms_lob.createtemporary( t_tmp, true );
|
dbms_lob.createtemporary( t_tmp, true );
|
||||||
for i in 0 .. trunc( length( p_xml ) / 4000 )
|
l_count := trunc( length( p_xml ) / 4000 );
|
||||||
|
|
||||||
|
if mod( length( p_xml ), 4000 ) = 0 then
|
||||||
|
l_count := greatest(l_count - 1, 0);
|
||||||
|
end if;
|
||||||
|
|
||||||
|
for i in 0 .. l_count
|
||||||
loop
|
loop
|
||||||
dbms_lob.append( t_tmp, utl_i18n.string_to_raw( substr( p_xml, i * 4000 + 1, 4000 ), 'AL32UTF8' ) );
|
dbms_lob.append( t_tmp, utl_i18n.string_to_raw( substr( p_xml, i * 4000 + 1, 4000 ), 'AL32UTF8') );
|
||||||
end loop;
|
end loop;
|
||||||
add1file( p_excel, p_filename, t_tmp );
|
add1file( p_excel, p_filename, t_tmp );
|
||||||
dbms_lob.freetemporary( t_tmp );
|
dbms_lob.freetemporary( t_tmp );
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user