Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / ошибка в АРЕХ / 12 сообщений из 12, страница 1 из 1
11.01.2016, 16:21
    #39144733
Леонов Юрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в АРЕХ
Доброго дня!

АРЕХ 4.2, кнопка формирует отчет в Jasper Reports и выдает его в pdf-формате.
Но суть не в этом. Перед формированием, загружаю в промежуточную таблицу исходные данные (id клиентов из компонента shuttle).
На моей базе проходит все норм на любых объемах, а вот у клиента выбивает ошибку
Код: plsql
1.
ORA-01044: size 24608017 of buffer bound to variable exceeds maximum o number conversion errorr to number conversion error


опытным путем установлено, что проблемы начинаются, когда id клиентов больше 512
Как устранить данную проблему?

Oracle 11g, если нужно приведу коды

Заранее благодарен
...
Рейтинг: 0 / 0
11.01.2016, 16:51
    #39144771
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в АРЕХ
Леонов Юрий,
вызвать отчётник вхолостую, чтобы определить что проблема не в нём, а например в приготовлении темп таблицы
...
Рейтинг: 0 / 0
11.01.2016, 19:00
    #39144895
Леонов Юрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в АРЕХ
Petro123,

как раз вылетает на этапе подготовки, проверено
...
Рейтинг: 0 / 0
11.01.2016, 19:43
    #39144928
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в АРЕХ
Леонов ЮрийPetro123,
как раз вылетает на этапе подготовки, проверено
т.е. банально код приготовки таблицы.
Апекс и отчётник ни при чём.
Сравнивай окружение серверов + форум оракла + код сюда
...
Рейтинг: 0 / 0
16.01.2016, 16:24
    #39148787
Леонов Юрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в АРЕХ
извиняюсь за долгую задержку, другие проблемы отвлекали((

итак, коды:
1. Заполнение таблицы
Код: 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.
procedure SetClientsID
  (
    p_session_id in varchar2,
    p_clob       in clob,
    p_delimiter  in varchar2 default ':'
  ) is
    pragma autonomous_transaction;
    l_counter  number default 0;
    l_pos      number default 1;
    l_last_pos number default 1;
    l_val      number;
    l_amount   number;
    l_clob     clob;
  begin
    pk_log.Flush;
    pk_log.InitDefaultContext(PTypeId => 1200, PSection => 'SetClientsID');
    pk_log.Info('SetClientsID...');
    l_clob := p_clob;
    dbms_lob.writeappend(l_clob, 1, p_delimiter);
    loop
      l_counter := l_counter + 1;
      pk_log.Info(util.Format('counter = "%d"', l_counter));
      l_pos := dbms_lob.instr(l_clob, p_delimiter, 1, l_counter);
      exit when(l_pos = 0);
    
      l_pos := l_pos + 1;
      l_amount := l_pos - l_last_pos - 1;
      l_val := dbms_lob.substr(l_clob, l_amount, l_last_pos);
      l_last_pos := l_pos;
      pk_log.Info(util.Format('value = "%s"', l_val));
    
      insert into REPORT_CLNT_IDS
        (CLNT_ID, SESSION_ID)
      values
        (l_val, p_session_id);
    end loop;
    pk_log.Info('SetClientsID - Ok');
    pk_log.Flush;
    commit;
  exception
    when others then
      pk_log.Error('SetClientsID - Error');
      pk_log.Flush;
      rollback;
      raise;
  end;



2. Очистка таблицы
Код: plsql
1.
2.
3.
4.
5.
6.
7.
procedure ClearClientsID(p_session_id in varchar2) is
    pragma autonomous_transaction;
  begin
    delete from REPORT_CLNT_IDS rci
     where rci.session_id = p_session_id;
    commit;
  end;



3. Сам вызов в АРЕХ
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
BEGIN
  :P10_SESSION_ID := :P10_SESSION_ID || '_' || to_char(current_timestamp, 'YYYYMMDDHH24MISSFF3');
  if :P10_CLIENT_TP = 'I' then
    apx_jri_util.SetClientsID(p_session_id => :P10_SESSION_ID, p_clob => :P10_CSO);
  else
    apx_jri_util.SetClientsID(p_session_id => :P10_SESSION_ID, p_clob => :P10_CLIENT_ID);
    apx_jri_util.SetOwnersID(p_session_id => :P10_SESSION_ID, p_clob => :P10_OWNERS);
  end if;
  xlib_jasperreports.set_report_url( :P10_WEB||'/jri/report' );
  xlib_jasperreports.show_report (p_rep_name => 'RRO-loaded-data-volume',
          p_rep_format          => :P10_FORMAT,
          p_data_source         => :P10_REPORT_ALIAS,
          p_out_filename        => 'RRO-'||:p10_from_date||'-'||:p10_to_date||'.'||:p10_format,
          p_rep_locale          => 'ru_UA',
          p_rep_encoding        => 'UTF-8',
          p_additional_params => 'p_from_date=' || :P10_FROM_DATE || '&p_to_date=' ||
                                                        :P10_TO_DATE || '&p_clnt_tp=' || :P10_CLIENT_TP ||
                                                        '&p_session_id=' || :P10_SESSION_ID);

  apex_application.g_unrecoverable_error := true;
  apx_jri_util.ClearClientsID(p_session_id => :P10_SESSION_ID);
  apx_jri_util.ClearOwnersID(p_session_id => :P10_SESSION_ID);
end;
...
Рейтинг: 0 / 0
16.01.2016, 16:28
    #39148789
Леонов Юрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в АРЕХ
Petro123 Сравнивай окружение серверов
Вот чего не могу сделать, того не могу. Свой сервер клиент пожелал настраивать сам, нас туда не пускает, типа коммерческая тайна.
...
Рейтинг: 0 / 0
18.01.2016, 10:13
    #39149365
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в АРЕХ
Леонов ЮрийСвой сервер клиент пожелал настраивать сам, нас туда не пускает, типа коммерческая тайна.
так не бывает. Ищите пути компромисса. Берите без данных, дайте им запросы с возвратом ответов по конфигам памяти и т.д.
- где лог ошибки и строка на которой ошибка?
- воспроизвести у себя ситуацию с " когда id клиентов больше 512".
- отрефакторить код:
- переделать на глобальную временную таблу оракла. Тогда номер сессии не нужен.
- вызвать много раз в коде APEX процедуру вместо парсинга и передаче clob а потом разбиве по delimeter и опять вставка. Код APEX тоже выполняется на сервере, поэтому ваш вызов в APEX можно переделать сразу с
Код: sql
1.
2.
3.
4.
insert into REPORT_CLNT_IDS
        (CLNT_ID, SESSION_ID - не нужно)
      values
        (l_val, p_session_id - не нужно);
...
Рейтинг: 0 / 0
18.01.2016, 11:44
    #39149450
Леонов Юрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в АРЕХ
Petro123Леонов ЮрийСвой сервер клиент пожелал настраивать сам, нас туда не пускает, типа коммерческая тайна.
так не бывает. Ищите пути компромисса. Берите без данных, дайте им запросы с возвратом ответов по конфигам памяти и т.д.
- где лог ошибки и строка на которой ошибка?
- воспроизвести у себя ситуацию с " когда id клиентов больше 512".
- отрефакторить код:
- переделать на глобальную временную таблу оракла. Тогда номер сессии не нужен.
- вызвать много раз в коде APEX процедуру вместо парсинга и передаче clob а потом разбиве по delimeter и опять вставка. Код APEX тоже выполняется на сервере, поэтому ваш вызов в APEX можно переделать сразу с
Код: sql
1.
2.
3.
4.
insert into REPORT_CLNT_IDS
        (CLNT_ID, SESSION_ID - не нужно)
      values
        (l_val, p_session_id - не нужно);



у нас ситуация не воспроизводится, все работает нормально,
по таблице - отчетом одновременно будут пользоваться несколько клиентов, как понять чьи это данные?
я уже думал так, но АРЕХ открывает свою дополнительную сессию и все временные данные не катят.
По ошибке - она возникает еще до входа в процедуру записи данных.
...
Рейтинг: 0 / 0
18.01.2016, 11:52
    #39149460
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в АРЕХ
Леонов Юрийпо таблице - отчетом одновременно будут пользоваться несколько клиентов, как понять чьи это данные?
простейшее - сам отчётник забирает всё что нужно. У меня сам Jasper вьюхой всё забирает.
Тогда сессия его и он не берёт то что не в БД и не провалидировано.
...
Рейтинг: 0 / 0
18.01.2016, 11:53
    #39149464
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в АРЕХ
Леонов ЮрийПо ошибке - она возникает еще до входа в процедуру записи данных.
конкретнее. А не пальцем: "вот там вот))"
...
Рейтинг: 0 / 0
18.01.2016, 14:03
    #39149628
Леонов Юрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в АРЕХ
Petro123,
про глобальные темповые не слышал, что это?
...
Рейтинг: 0 / 0
18.01.2016, 14:26
    #39149673
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка в АРЕХ
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / ошибка в АРЕХ / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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