powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Регионы
19 сообщений из 44, страница 2 из 2
Регионы
    #36454648
Katerin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашла выход сделать через фрейм и переменную. Однако теперь фрейм отображается. а сама страница почему-то нет. Не посмотрите?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
declare 
  c clob;
  tmp varchar2( 32000 );
  pos number:=  1 ;
  len number;
begin
  select cdata into c from TC_REP where REP_ID= 121 ;
  len := dbms_lob.getlength(c); 
  -- выдачfa содержимого clob через htp.p
htp.p('<script language="JavaScript">
var varFrame = "');
loop 
    exit when pos > len;
    tmp := dbms_lob.substr(c,  32000 , pos);
    htp.p(tmp);
    pos:= pos +  32000 ;
  end loop;
htp.p('"</script><iframe src="javascript:parent.varFrame"></iframe>
');
exception when no_data_found then
  htp.p('данных не найдено');
end;
...
Рейтинг: 0 / 0
Регионы
    #36455482
Katerin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь вывести все это в новом окне. Вот так выводится окно - все нормально

Код: plaintext
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.
declare 
cdat clob;
tmp varchar2( 32000 );

begin
select cdata into cdat from tc_rep where rep_id =  121 ;
tmp:='wnd.document.write("'||c||'");';



htp.p('
<script>
{

var opts = "top=200, left=300, width=400, height=400";
var wnd = window.open("about:blank","",opts);

var l_h1 = wnd.document.createElement("h1");
var l_body = wnd.document.createElement("body");
var txt_nd = wnd.document.createTextNode("!!!");

l_h1.appendChild(txt_nd);
l_body.appendChild(l_h1);
wnd.document.appendChild(l_body);');

--htp.p(tmp);

htp.p('}</script>');

end;

Но как только пытаюсь передать данные (снимаю коммент со строки htp.p(tmp);) - все - ни окна. ни вообще какоой либо активности. Никто не объяснит в чем может быть дело?
...
Рейтинг: 0 / 0
Регионы
    #36461970
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Katerin,

0. Вообще, для проверки, что там получилось на странице, можно использовать FireBug в Лисичке, WebDeveloper в IE. Для Оперы, Хрома и Сафари тоже, думаю, найдутся свои утилиты.
1. У меня в примере создан PL/SQL Dynamic Content-регион со следующим Source:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare 
  c clob;
  tmp varchar2( 32000 );
  pos number:=  1 ;
  len number;
begin
  select data into c from test_clob_content where ID=:P17_X;
  len := dbms_lob.getlength(c); 
  -- выдачa содержимого clob через htp.p
  loop 
    exit when pos > len;
    tmp := dbms_lob.substr(c,  32000 , pos);
    htp.p(tmp);
    pos:= pos +  32000 ;
  end loop;
exception when no_data_found then
  htp.p('данных не найдено');
end;
Попробуйте приспособить этот код под Ваши таблицы и переменные, записать в таблицу обычный текст (например, '1, 2, 3...') и вывести его в регионе. И когда всё получится, посмотрите, что именно за теги хранятся у Вас в других clob-ах, раз они ломают Вам разметку.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Регионы
    #39701445
DanJa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня всем!

Имеем Application Express 4.2.1.00.08.

Имеем классический репорт со следующим сорсом:
Код: 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.
76.
77.
78.
79.
80.
select
  zmch.id zmch_id,
  zmch.reg_num,
  zmch.reg_date zmch_reg_date,
  zmch.source_org_name,
  zmch.product_name,
  zmch.ANS_DATE,
  ismzamech_conv(zmch.id, 'cctg') ctg,
  ismzamech_conv(zmch.id, 'stxt') stext_stext
from
  ISMZAMECH_ZAMECH zmch
where
  to_char(zmch.reg_date,'YYYY') like :P1_YEAR
  AND
  (
    :P1_STEXT is null
    OR
    (
      :P1_STEXT is not null
      AND EXISTS
      (
        SELECT
          1
        FROM
          ISMZAMECH_ZMS zms
        WHERE
          zms.zm_id=zmch.id
          AND zms.st_id=:P1_STEXT
      )
    )
  )
  and
  (
    (
      :P1_STATUS is null or :P1_STATUS=0
    )
    or
    (
      :P1_STATUS=1
      and exists (select 1 from ismzamech_zmcc c where c.zm_id=zmch.id and (c.cc_id=13 OR c.cc_id=25))
    )
    or
    (
      :P1_STATUS=2
      and NOT exists (select 1 from ismzamech_zmcc c where c.zm_id=zmch.id and (c.cc_id=13 OR c.cc_id=25))
      and zmch.ANS_DATE is null
    )
    or
    (
      :P1_STATUS=3
      and NOT exists (select 1 from ismzamech_zmcc c where c.zm_id=zmch.id and (c.cc_id=13 OR c.cc_id=25))
      and zmch.ANS_DATE is not null
    )
  )
  and
  (
    :p1_dept is null
    or
    (
      :p1_dept is not null
      and zmch.RESP_DEPT=
      (
        select
          dept.id
        from
          hr_dept0 dept
        where
          dept.name like :p1_dept
      )
    )
  )
  and
  (
    :P1_PRODUCT_NAME is null
    or
    (
      :P1_PRODUCT_NAME is not null
      and zmch.PRODUCT_NAME like :P1_PRODUCT_NAME
    )
  )


Использованная в сорсе функция имеет следующий код:
Код: 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.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
CREATE OR REPLACE FUNCTION ismzamech_conv(zmch_id number, fnt varchar2)
RETURN
  clob
AS
  outrec clob:='';
  numrows number:=0;
BEGIN
----------------------
  IF fnt='stxt'
  THEN
    FOR i IN
      (
        SELECT
          st.stext
        FROM
          ismzamech_zms zms,
          ismzamech_stexts st
        WHERE
          zms.zm_id=zmch_id
          AND zms.st_id=st.id
      )
    LOOP
      IF length(outrec)>0 THEN outrec := outrec || ';<BR> ' || i.stext;
      ELSE outrec := i.stext;
      END IF;
    END LOOP;
----------------------
  ELSIF fnt='cctg'
  THEN
    FOR i IN
      (
        SELECT
          c.text
        FROM
          ismzamech_zmcc zmcc,
          ismzamech_causes c
        WHERE
          zmcc.zm_id=zmch_id
          AND zmcc.cc_id=c.id
      )
    LOOP
      IF length(outrec)>0 THEN outrec := outrec || ';<BR> ' || i.text;
      ELSE outrec := i.text;
      END IF;
    END LOOP;
----------------------
  ELSIF fnt='rd'
  THEN
    FOR i IN
      (
        SELECT
          case when dpt.dept_lev<=1 then dpt.name else st_n.deptname(dpt.id,6)||' / '||dpt.name end text
        FROM
          ismzamech_zmrd zmrd,
          hr_dept0 dpt
        WHERE
          zmrd.zm_id=zmch_id
          AND zmrd.rd_id=dpt.id
      )
    LOOP
      IF length(outrec)>0 THEN outrec := outrec || ';<BR> ' || i.text;
      ELSE outrec := i.text;
      END IF;
    END LOOP;
----------------------
  ELSIF fnt='corrlist'
  THEN
    BEGIN
      FOR i IN
        (
          select
            CORR_TODO,
            (
              select
                pr_n.fname(cardid => card.id)
                || ' ('
                || emp.tab_n
                || ' | '
                || st_n.deptname(trans.DEPT_ID,10)
                || ' | '
                || st_n.appname(trans.APPOINT_ID,0)
                || ')'
              from
                pr_card0 card,
                pr_emp0 emp,
                pr_trans0 trans
              where
                emp.card_id=card.id
                and trans.emp_id=emp.id
                and trans.tp_abbr in ('CUR','RES')
                and trans.subst_emp_id is null
                and trans.subst_staff_id is null
                and trans.d_to=to_date('31.12.2099','dd.mm.yyyy')
                and emp.id=CORR_INCHARGE
            ) incharge,
            CORR_TERMS,
            CORR_DONE,
            CORR_RES_STAT,
            CORR_EFF_EVAL_PERIOD
          from
            ISMZAMECH_CORRECTIONS
          where
            zamech_id=zmch_id
          
         /* SELECT
            zmcr.corr_todo text
          FROM
            ismzamech_corrections zmcr
          WHERE
            zmcr.zamech_id=zmch_id*/
        )
      LOOP
        numrows:=numrows+1;
        outrec := outrec || '<tr class="highlight-row"><td headers="CORR_TODO" class="t20data">'||i.corr_todo||'</td><td headers="INCHARGE" class="t20data">'||nvl(i.incharge,'-')||'</td><td headers="CORR_TERMS" class="t20data">'||nvl(i.corr_terms,'-')||'</td><td headers="CORR_DONE" class="t20data">'||nvl(i.corr_done,'-')||'</td><td headers="CORR_EFF_EVAL_PERIOD" class="t20data">'||nvl(i.CORR_EFF_EVAL_PERIOD,'-')||'</td><td headers="CORR_RES_STAT" class="t20data">'||nvl(i.corr_res_stat,'-')||'</td></tr>';
      END LOOP;
      IF numrows>0 THEN
        outrec := '<table border="0" cellpadding="0" cellspacing="0" summary="" class="t20StandardAlternatingRowColors t20Report" style="width:100%"><tbody><tr><th class="t20ReportHeader" id="CORR_TODO">Действия</th><th class="t20ReportHeader" id="INCHARGE">Ответственный</th><th class="t20ReportHeader" id="CORR_TERMS">Сроки</th><th class="t20ReportHeader" id="CORR_DONE">Выполнение</th><th class="t20ReportHeader" id="CORR_EFF_EVAL_PERIOD">Срок оценки результативности</th><th class="t20ReportHeader" id="CORR_RES_STAT">Статус результативности</th></tr>'||outrec||'</tbody></table>';
        ELSE
          outrec:='-';
        END IF;
    END;
    
----------------------
  END IF;
  RETURN outrec;
END;


Все замечательно работает, но вот именно у одного только пользователя сегодня репорт не отработал, выдав следующее (см. скрин).
...
Рейтинг: 0 / 0
Регионы
    #39701454
DanJa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще забыл сказать, что темплейт репорта изменил следующим образом (см. скриншот).
...
Рейтинг: 0 / 0
Регионы
    #39701521
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DanJa,

Ошибка возникла из за того, что у данного пользователя данные оказались большими.
Какой то полуподход у решению задачи. половина таблицы стандартным способом, половину отрисовали.
Ну сгенерите таблицу целиком при помощи региона dynamic pl/sql с нужными Вам условиями.
...
Рейтинг: 0 / 0
Регионы
    #39702405
DanJa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blkangelDanJa,

Ошибка возникла из за того, что у данного пользователя данные оказались большими.
Какой то полуподход у решению задачи. половина таблицы стандартным способом, половину отрисовали.
Ну сгенерите таблицу целиком при помощи региона dynamic pl/sql с нужными Вам условиями.

Самое интересное в том, что данные у всех пользователей одни и те же. Спасибо за подсказку с регионом dynamic pl/sql! Попробую. Но интересно все же разобраться, почему именно у этого пользователя вдруг ни с того ни с сего перестали отображаться те же самые данные, которые отображаются у других пользователей.
...
Рейтинг: 0 / 0
Регионы
    #39702408
DanJa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blkangelDanJa,

Ошибка возникла из за того, что у данного пользователя данные оказались большими.
Какой то полуподход у решению задачи. половина таблицы стандартным способом, половину отрисовали.
Ну сгенерите таблицу целиком при помощи региона dynamic pl/sql с нужными Вам условиями.

Сейчас перепроверил - в отчете есть ограничения по году (в сорсе региона видно). Выбрал данные за год, где данных вообще нет - результат тот же. Т.е. проблема точно не в объеме данных. Здесь что-то странное и непонятное.
...
Рейтинг: 0 / 0
Регионы
    #39702423
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DanJa,
Включите дебаг, давайте посмотрим где конкретно спотыкается. Может ошибка возникает в condition этого региона, может ФИО у врача длинная.
в 4.2 дебаг не очень говоряший, но все же.
...
Рейтинг: 0 / 0
Регионы
    #39702675
DanJa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blkangel,

Вот такой дебаг.
...
Рейтинг: 0 / 0
Регионы
    #39702690
DanJa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переименовал пользователя (просто добавил 2 в конце) - все заработало. Я в недоумении... Может какой-то кэш есть в АПЕКСе, который нужно почистить?
...
Рейтинг: 0 / 0
Регионы
    #39702722
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DanJaПереименовал пользователя (просто добавил 2 в конце) - все заработало. Я в недоумении... Может какой-то кэш есть в АПЕКСе, который нужно почистить?
Это подтверждает мои слова, значит дело в данных и их неккоректной обрабоке. Теперь осталось найти место где и испарвить.
...
Рейтинг: 0 / 0
Регионы
    #39702724
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но мне кажется, что вот где то тут
Код: plsql
1.
2.
  ismzamech_conv(zmch.id, 'cctg') ctg,
  ismzamech_conv(zmch.id, 'stxt') stext_stext


результат больше 2000 символов, помоему такое ограничение.
...
Рейтинг: 0 / 0
Регионы
    #39703948
DanJa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blkangel,

Я бы согласился, если у различных пользователей были бы различные данные, но нет - все данные отображаются в полном объеме для любого пользователя. Единственное ограничение - одни пользователи могут вносить и корректировать данные, а другие - нет.
На сегодняшний день еще у одного пользователя проявился этот же баг.
...
Рейтинг: 0 / 0
Регионы
    #39703956
DanJa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поправочка - уже не у одного. У нескольких активных пользователей такая "беда". Те, кто чаще всего заходят в данное приложение и просматривают данные. При этом если пользователя переименовать, то все моментально "лечится". У меня стойкое ощущение того, что где-то есть какой-то кэш, который переполняется и не отчищается самостоятельно.
...
Рейтинг: 0 / 0
Регионы
    #39703973
DanJa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наконец-то выявили источник проблемы - ошибка вылетает в момент сортировки по двум этим полям:
Код: plsql
1.
2.
3.
 
  ismzamech_conv(zmch.id, 'cctg') ctg,
  ismzamech_conv(zmch.id, 'stxt') stext_stext


Куда лезть? Что смотреть, что бы исправить?
...
Рейтинг: 0 / 0
Регионы
    #39704167
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сортируете по клобу? :)
Ну сделайте сортировку по другому полю.
...
Рейтинг: 0 / 0
Регионы
    #39707398
DanJa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blkangelСортируете по клобу? :)
Ну сделайте сортировку по другому полю.
"А че, так можно было?" )))
Ну да, как-то не подумал, что с сортировкой по клобу бедово будет.
А ведь пользователи просят... ((
...
Рейтинг: 0 / 0
Регионы
    #39707403
DanJa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все! Нашел решение с помощью dbms_lob.substr. Теперь все замечательно сортируется! Всем спасибо!
...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Регионы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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