Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Forms Новый топик    Ответить
 Обработка большого кол-ва записей при запиливании их в файл ёкселя.  [new]
Джонни_Инглиш
Member

Откуда:
Сообщений: 78
Сильно не пинайте, ибо я новичок.

есть таблица
create table world_of_warcraft (identif varchar2(5));


таблица заполнена:

declare 
i integer :=1;
begin
loop
i := i + 1;
insert into world_of_warcraft (identif) values ('pr');
exit when i = 1500000;
end loop;
commit;
end;


в итоге имеем что в таблице 1499999 - записей.


есть процедура, в oracle forms:

PROCEDURE proverka
AS
 CURSOR cur_1
    IS        
select identif from world_of_warcraft;


    AppId OLE2.Obj_Type;
    i      INTEGER := 1;
    f_name VARCHAR2(200);
  
BEGIN
    f_name := GET_FILE_NAME('C:\', ('Бл  '||' Дата формирования'|| to_char(sysdate, 'dd.mm.yyyy HH24-MI-SS') ||  '.xlsx'), 'XLSX Files (*.xlsx)|*.xlsx|', NULL, SAVE_FILE, TRUE);  
			IF f_name is not null  
				then 

 
SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'BUSY');   
Создать_Сеанс_Excel(null, false, AppId); 
Создать_лист(AppId, 'Лист 1'); 
Записать_В_Ячейку_Текст(AppId, i,  1, 'identif', 1,2);
Установить_ширину_столбца(AppId,   1, 71); 

FOR cur_rec IN cur_1 
LOOP  
i := i + 1;  
Записать_В_Ячейку_Текст(AppId, i,  1, cur_rec.identif, 1,2);
--exit when i = 65536;
END LOOP;

Показать_Сеанс_Excel(AppId, true);  
SAVE (AppId, f_name);
Завершить_Сеанс_Excel(AppId);  
SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'DEFAULT');    
else  Message('Куда сохранять? ');  
End If; 

exception when others      
then SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'DEFAULT');         
Message('Ошибка: '||sqlerrm);
--Exit_Form(Do_Commit);

END;



Вопрос в том, как сделать чтобы процедура запиливала в файл ёкселя, на разные листы весь обьем таблички world_of_warcraft?
Понимаю что нужен Условный оператор IF но пока не понял как его добавить в процедуру, прошу наведите на мысль.
19 янв 17, 10:37    [20121614]     Ответить | Цитировать Сообщить модератору
 Re: Обработка большого кол-ва записей при запиливании их в файл ёкселя.  [new]
OLE=проблемы
Guest
Забудь про OLE если не хочешь проблем. Делай excel в базе любым доступным способом, а форма будет только отдавать клиенту готовый файл.
19 янв 17, 11:19    [20121878]     Ответить | Цитировать Сообщить модератору
 Re: Обработка большого кол-ва записей при запиливании их в файл ёкселя.  [new]
Джонни_Инглиш
Member

Откуда:
Сообщений: 78
Задача решена по предложенному Xdredd.vl решению.

declare 
  n_list number:=1;

.....
FOR cur_rec IN cur_1 
LOOP  
i := i + 1;  
Записать_В_Ячейку_Текст(AppId, i,  1, cur_rec.identif, 1,2);
--exit when i = 65536;
if mod(i, 65536) = 0 /*or mod(i, 65536*2) = 0 можно расширить до максимального кол-ва листов*/
    then
     n_list := n_list + 1;
      Выбрать_лист(AppId, 'Лист'|| to_char(n_list));
      Записать_В_Ячейку_Текст(AppId, 1,  1, 'identif', 1,2);
     i := 1;
   end if;
END LOOP;

.....



всем спасибо.
24 янв 17, 06:58    [20137999]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Forms Ответить