powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ниид хелп!
11 сообщений из 11, страница 1 из 1
Ниид хелп!
    #39389259
Сильно не пинайте, ибо я новичок.

есть таблица

Код: 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 - записей.


есть процедура:

Код: 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
Ниид хелп!
    #39389263
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джонни_ИнглишСильно не пинайте, ибо я новичок.Задрал: http://www.sql.ru/forum/rules.aspx Не рекомендуется:
Публиковать сообщения с бессмысленными темами. Например: <Люди помогите>, <Проблема!!>, <Срочно нужна помощь!>, <может знаете?> и т.д.
...
Рейтинг: 0 / 0
Ниид хелп!
    #39389265
Elic,

Лучше-бы по существу.
...
Рейтинг: 0 / 0
Ниид хелп!
    #39389266
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джонни_Инглиш
Код: plsql
1.
OLE2.Obj_Type;

Это троллинг.
...
Рейтинг: 0 / 0
Ниид хелп!
    #39389267
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джонни_Инглиш
Код: plsql
1.
2.
3.
4.
5.
6.
FOR cur_rec IN cur_1 
LOOP  
i := i + 1;  
Записать_В_Ячейку_Текст(AppId, i,  1, cur_rec.identif, 1,2);
--exit when i = 65536;    Excel-2003?
END LOOP;
...
Рейтинг: 0 / 0
Ниид хелп!
    #39389270
andreymx,

К большому сожалению да.
...
Рейтинг: 0 / 0
Ниид хелп!
    #39389305
Xdredd.vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джонни_Инглиш,

По "индусски" конечно но:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare 
  n_list number:=1;

.....
Записать_В_Ячейку_Текст(AppId, i-(n_list-1)*65535,  1, cur_rec.identif, 1,2);

---  exit when i = 65536
   if mod(i,65535)=0 then
      n_list:=n_list +1;
      Создать_лист( AppId, 'Лист '||to_char(n_list) );
      Сделать_активным('Лист '||to_char(n_list));
   end if;
.....
...
Рейтинг: 0 / 0
Ниид хелп!
    #39389323
Xdredd.vl,

Отваливается, к сожалению, с ошибкой ORA-06502
...
Рейтинг: 0 / 0
Ниид хелп!
    #39389360
Xdredd.vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джонни_Инглиш,

то что оно работать будет никто не обещал, это из разряда "в какую сторону надо думать", а не "напиши именно так как в посте".
...
Рейтинг: 0 / 0
Ниид хелп!
    #39389386
Xdredd.vl,

Задумку понял, пойду дальше ковырять)
...
Рейтинг: 0 / 0
Ниид хелп!
    #39389446
Джонни_Инглиш,

Задача решена по предложенному 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
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ниид хелп!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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