все, вроде как работает...
вобщем сделал так
Код:
procedure dbst_save_lob(
id in number
,blb in blob
) is
len BINARY_INTEGER;
begin
if loc is null then
begin
update test_lob set ORIG_FILE=EMPTY_BLOB ();
select ORIG_FILE into loc from test_lob where TEST_ID=1 for update;
--prog_debug_info_save('старт');
end;
end if;
if loc is not null then
begin
len := length(blb);
if len<>32000 then
begin
dbms_lob.writeappend(loc, len, blb);
update test_lob set ORIG_FILE=loc where TEST_ID=1;
--prog_debug_info_save('финиш');
end;
else
dbms_lob.writeappend(loc, len, blb);
end if;
end;
end if;
end;
loc это глобальная пакетная переменная - локатор, ставится в null при записи нового файла. и пока надцать раз вызывается процедура не меняется. в итоге всего один селект чтоб инициализировать локатор и всего один update при получении последней части файла. есть конечно одно но, вполне возможно, что когда нибудь, кто нибудь, попытается залить файл, размер которого будет кратен 32000 байт... вот тут то кривые руки и всплывут)) надо еще подумать...