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:
tompetrus 2016-05-20 16:29:56 +02:00
parent a7d8f9e34e
commit ae8f2d2058

View File

@ -781,11 +781,18 @@ as
)
is
t_tmp blob;
l_count binary_integer;
begin
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
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;
add1file( p_excel, p_filename, t_tmp );
dbms_lob.freetemporary( t_tmp );