powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Обработка большого кол-ва записей при запиливании их в файл ёкселя.
3 сообщений из 3, страница 1 из 1
Обработка большого кол-ва записей при запиливании их в файл ёкселя.
    #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
Обработка большого кол-ва записей при запиливании их в файл ёкселя.
    #39387472
Забудь про OLE если не хочешь проблем. Делай excel в базе любым доступным способом , а форма будет только отдавать клиенту готовый файл.
...
Рейтинг: 0 / 0
Обработка большого кол-ва записей при запиливании их в файл ёкселя.
    #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
3 сообщений из 3, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Обработка большого кол-ва записей при запиливании их в файл ёкселя.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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