Гость
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Обработка большого кол-ва записей при запиливании их в файл ёкселя. / 3 сообщений из 3, страница 1 из 1
19.01.2017, 10:37
    #39387414
Обработка большого кол-ва записей при запиливании их в файл ёкселя.
Сильно не пинайте, ибо я новичок.

есть таблица
Код: plsql
1.
create table world_of_warcraft (identif varchar2(5));



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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
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 но пока не понял как его добавить в процедуру, прошу наведите на мысль.
...
Рейтинг: 0 / 0
19.01.2017, 11:19
    #39387472
Обработка большого кол-ва записей при запиливании их в файл ёкселя.
Забудь про OLE если не хочешь проблем. Делай excel в базе любым доступным способом , а форма будет только отдавать клиенту готовый файл.
...
Рейтинг: 0 / 0
24.01.2017, 06:58
    #39389992
Обработка большого кол-ва записей при запиливании их в файл ёкселя.
Задача решена по предложенному Xdredd.vl решению.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
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;

.....




всем спасибо.
...
Рейтинг: 0 / 0
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Обработка большого кол-ва записей при запиливании их в файл ёкселя. / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]