Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Просьба помочь разобраться в ХП (думаю ошибка в типе данных)? / 9 сообщений из 9, страница 1 из 1
03.11.2016, 13:36
    #39340763
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
Код: 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.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
create or replace PROCEDURE ORA_to_EXCEL(
    v_date    VARCHAR2,
    v_date2   VARCHAR2,
    v_iotdnum VARCHAR2,
    v_put     VARCHAR2)
AS
  TYPE oldfg IS TABLE of NUMBER INDEX BY PLS_INTEGER;
  rr oldfg;
BEGIN
 rr(1) :=  replace(replace (substr(v_iotdnum, 1, instr(v_iotdnum, ',')), ' '), ',');
 rr(2) := replace(replace (substr(v_iotdnum, 6, instr(v_iotdnum, ',')),  ' '), ',');
 rr(3) := replace(replace (substr(v_iotdnum, 12, instr(v_iotdnum, ',')),  ' '), ',');
 rr(4) := replace(replace (substr(v_iotdnum, 18, instr(v_iotdnum, ',')), ' '), ',');
declare 
 CURSOR t_data
  IS
    SELECT DISTINCT p.s4et,
      p.iNAME,
      p.DATE_OPEN,
      CASE WHEN p.dt IS NULL
        THEN '(null)'
        ELSE p.dt
      END dt,
      CASE WHEN p.kt IS NULL
        THEN '(null)'
        ELSE p.kt
      END kt
    FROM pizdec p
    WHERE
      /*Задаем дату открытия счета*/
      to_date (p.DATE_OPEN,'DD.MM.YY' ) BETWEEN to_date (v_date, 'DD.MM.YYYY') AND to_date (v_date2, 'DD.MM.YYYY')
    AND to_number (p.NUM) IN (rr(1), rr(2), rr(3), rr(4));
begin
  /*Проверка на правильность ввода даты*/
  IF (regexp_substr(v_date, '([0-2]\d|3[01])\.(0\d|1[012])\.(\d{4})', 1, 1, 'i') IS NULL) 
      OR (regexp_substr(v_date2, '([0-2]\d|3[01])\.(0\d|1[012])\.(\d{4})', 1, 1, 'i') IS NULL) THEN
    raise_application_error(-20001,'Date is incorrect! Put correct date!');
  END IF;
  
  
  ORA_EXCEL. new_document;
  ORA_EXCEL. add_sheet('Лист 1');
  ORA_EXCEL. add_row;
  ORA_EXCEL. set_cell_value('A' , 'Счет');
  ORA_EXCEL. set_cell_value('B' , 'COTDNAME');
  ORA_EXCEL. set_cell_value('C' , 'DATE_OPEN');
  ORA_EXCEL. set_cell_value('D' , 'Дебет');
  ORA_EXCEL. set_cell_value('E' , 'Кредит');
  ORA_EXCEL. set_cell_font('A', 'Times New Roman' , 14);
  ORA_EXCEL. set_cell_font('B', 'Times New Roman' , 14);
  ORA_EXCEL. set_cell_font('C', 'Times New Roman' , 14);
  ORA_EXCEL. set_cell_font('D', 'Times New Roman' , 14);
  ORA_EXCEL. set_cell_font('E', 'Times New Roman' , 14);
  ORA_EXCEL. set_cells_filter('A1', 'E1');
  FOR cur_rec IN t_data
  LOOP
    ORA_EXCEL. add_row;
    ORA_EXCEL. set_cell_value('A' , cur_rec.s4et);
    ORA_EXCEL. set_cell_value('B' , TO_CHAR (cur_rec.iNAME));
    ORA_EXCEL. set_cell_value('C' , cur_rec.DATE_OPEN);
    ORA_EXCEL. set_cell_value('D' , cur_rec.dt);
    ORA_EXCEL. set_cell_value('E' , cur_rec.kt);
    EXIT
  WHEN t_data%NOTFOUND;
  END LOOP;
  ORA_EXCEL. save_to_file(v_put, 'example.xlsx');
  DBMS_OUTPUT.enable;
  Dbms_Output.Put_Line('Файло создано');
EXCEPTION
WHEN OTHERS THEN
  raise_application_error(-20001,sqlerrm,true);
  ORA_EXCEL. save_to_file(v_put, 'example.xlsx');
  RAISE;
END;
end;




Подскажите что делаю не так?

Вызов процедуры:
Код: plsql
1.
2.
3.
4.
set serveroutput on;
begin
ora_to_excel_free ('01.02.2015','01.02.2015', '6216, 6403, 1562, 3214', 'DIR');
end;



Итог Должны запилиться данные в ёксель, но этого не происходит, думаю напутал с типами данных вот здесь:
Код: plsql
1.
AND to_number (p.NUM) IN (rr(1), rr(2), rr(3), rr(4));



Код: plsql
1.
p.NUM VARCHAR2(100 BYTE)
...
Рейтинг: 0 / 0
03.11.2016, 13:46
    #39340777
K790
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
Джонни_Инглиш,

авторORA_to_EXCEL
авторbegin
ora_to_excel_free

если думаете на значения, то вбейте явно, да проверьте
Код: plsql
1.
AND to_number (p.NUM) IN (6216, 6403, 1562, 3214);
...
Рейтинг: 0 / 0
03.11.2016, 13:53
    #39340788
j2k
j2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
Джонни_Инглиш,
Код: plsql
1.
 to_date (p.DATE_OPEN,'DD.MM.YY' ) 

- вот тут p.DATE_OPEN - это строка?
...
Рейтинг: 0 / 0
03.11.2016, 13:58
    #39340794
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
K790,

Да извиняюсь вызов не тот, вот так правильно:
Код: plsql
1.
2.
3.
4.
set serveroutput on;
begin
ora_to_excel ('01.02.2015','01.02.2015', '6216, 6403, 1562, 3214', 'MDVDIR');
end;
...
Рейтинг: 0 / 0
03.11.2016, 13:59
    #39340796
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
j2k,

DATE_OPEN VARCHAR2(100 BYTE)
...
Рейтинг: 0 / 0
03.11.2016, 14:03
    #39340799
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
Джонни_Инглиш,
Зачем для for in loop использовать exit when?
Если данных нет, вы просто не попадете внутрь цикла
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
...
FOR cur_rec IN t_data
  LOOP
    ORA_EXCEL. add_row;
    ORA_EXCEL. set_cell_value('A' , cur_rec.s4et);
    ORA_EXCEL. set_cell_value('B' , TO_CHAR (cur_rec.iNAME));
    ORA_EXCEL. set_cell_value('C' , cur_rec.DATE_OPEN);
    ORA_EXCEL. set_cell_value('D' , cur_rec.dt);
    ORA_EXCEL. set_cell_value('E' , cur_rec.kt);
    EXIT WHEN t_data%NOTFOUND;
...
  END LOOP



Почему Вы считаете что строк нет
1) Попробуйте явно выполнить select
2) вставьте debug вывод в конце цикла
Код: plsql
1.
2.
3.
4.
...
dbms_output.put_line(cur_rec.s4et||','||TO_CHAR (cur_rec.iNAME)|| cur_rec.dt||cur_rec.kt);
END LOOP;
...


p.s. Чтобы быть уверенным в каком виде данные попадают в файл, явно указывайте формат
полей при присваивании ячеек
to_date(cur_rec.dt,'Нужный для excel формат')
...
Рейтинг: 0 / 0
03.11.2016, 14:06
    #39340802
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
Джонни_Инглишj2k,

DATE_OPEN VARCHAR2(100 BYTE)
Код: plsql
1.
2.
3.
...
to_date (p.DATE_OPEN,'DD.MM.YYYY' )
...
...
Рейтинг: 0 / 0
03.11.2016, 14:07
    #39340805
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
Всем спасибо, ошибка в заданном периоде дат при вызове ХП.
Вообще напишите свое мнение таким образом разбирать переменную v_iotdnum VARCHAR2 правильно?
или можно столкнуться с проблемами?
...
Рейтинг: 0 / 0
03.11.2016, 14:43
    #39340849
j2k
j2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
Джонни_ИнглишВообще напишите свое мнение таким образом разбирать переменную v_iotdnum VARCHAR2 правильно?
Куча тем уже с распарсиванием строки в столбец, можно например через xmltable, что-то вроде такого:
Код: plsql
1.
select result from xmltable('1, 10, 15, 20' columns result number path '.')
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Просьба помочь разобраться в ХП (думаю ошибка в типе данных)? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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