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

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

Это троллинг.
...
Рейтинг: 0 / 0
23.01.2017, 08:02
    #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
23.01.2017, 08:07
    #39389270
Ниид хелп!
andreymx,

К большому сожалению да.
...
Рейтинг: 0 / 0
23.01.2017, 09:45
    #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
23.01.2017, 10:08
    #39389323
Ниид хелп!
Xdredd.vl,

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

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

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


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