Показать сообщение отдельно
  #2  
Старый 12.10.2010, 14:29
eldaeron eldaeron вне форума
Прохожий
 
Регистрация: 05.05.2008
Сообщения: 15
Репутация: 10
По умолчанию

все, вроде как работает...
вобщем сделал так
Код:
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 байт... вот тут то кривые руки и всплывут)) надо еще подумать...
Ответить с цитированием