powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
9 сообщений из 9, страница 1 из 1
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
    #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
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
    #39340777
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джонни_Инглиш,

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

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

- вот тут p.DATE_OPEN - это строка?
...
Рейтинг: 0 / 0
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
    #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
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
    #39340796
j2k,

DATE_OPEN VARCHAR2(100 BYTE)
...
Рейтинг: 0 / 0
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
    #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
Просьба помочь разобраться в ХП (думаю ошибка в типе данных)?
    #39340802
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джонни_Инглишj2k,

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


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