powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Дерево с title из двух таблиц
8 сообщений из 8, страница 1 из 1
Дерево с title из двух таблиц
    #39701348
c-net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Текущий, рабочий код формирования дерева:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
DECLARE
  q varchar2(4000);
begin 

  q:='   select case when connect_by_isleaf = 1 then 0 ';
  q:=q||'       when level = 1             then 1 ';
  q:=q||'       else                           -1 ';
  q:=q||'       end as status,  ';  
  q:=q||'  level, ';
  q:=q||'       long_number || '' '' || unit_name	 as title,';
  q:=q||'    ''icon-gear'' as  icon, ';
 q:=q||'   ID_REESTR as value, ';
 q:=q||'   null as tooltip, ';
q:=q||'  ''javascript:pageItemValue(''||apex_escape.js_literal(ID_REESTR)||''); '' as link ';
 q:=q||'   from (select reestr.* from reestr where reestr.locked=''false'' )';
 q:=q||'   connect by prior ID_REESTR = ID_PARENT  ';
q:=q||'  start with ID_REESTR=1  ';

return q;
end;



Теперь надо в tittle добавить значение из другой таблицы по условию. Не могу разобраться с синтаксисом запроса :( из-за специфики указания where в дереве.
то есть я же не могу написать так:

Код: plsql
1.
2.
3.
4.
...
t1.long_number || '' '' || t1.unit_name ||  " " || t2.value2	 as title,';

FROM reestr t1, table2 t2 WHERE t1.ID_REESTR=t2.ID_REESTR and t1.locked=''false'' and t2.value=''abc"
...
Рейтинг: 0 / 0
Дерево с title из двух таблиц
    #39701362
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос в чем? Как соединение таблиц делается? :)
...
Рейтинг: 0 / 0
Дерево с title из двух таблиц
    #39701564
c-net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blkangel,

как это применительно к дереву:) вроде нашел на форуме тему копаю
...
Рейтинг: 0 / 0
Дерево с title из двух таблиц
    #39701934
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не совсем понял задачу. Может так?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select 
    case when connect_by_isleaf = 1 then 0 
       when level = 1             then 1 
       else                           -1 
       end as status,    
    level, 
       long_number || ' ' || unit_name|| ' ' || t2.value2 as title,
    'icon-gear' as  icon, 
    ID_REESTR as value, 
    null as tooltip, 
    'javascript:pageItemValue('||apex_escape.js_literal(ID_REESTR)||'); ' as link 
from (select reestr.* from reestr where reestr.locked='false' )
left join table2 t2 on t1.ID_REESTR=t2.ID_REESTR and and t2.value='abc'
connect by prior ID_REESTR = ID_PARENT  
start with ID_REESTR=1  
...
Рейтинг: 0 / 0
Дерево с title из двух таблиц
    #39702053
c-net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blkangel,

Cпасибо как всегда за отклик!
Ну как бы да, смысл такой. Но с синтаксисом не разберусь, разными способами пробую, но напарываюсь на ошибку:


ваш вариант тоже не прошел, ругается(полный листинг)):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
DECLARE
  q varchar2(4000);
begin 

q:='   SELECT CASE when connect_by_isleaf = 1 then 0 ';
q:=q||'       WHEN level = 1             then 1 ';
q:=q||'       else                           -1 ';
q:=q||'       end as status,  ';  
q:=q||'  level, ';
q:=q||'       reestr.long_number || '' '' || reestr.unit_name || '' '' || char_attribute.char_value	 as title,';
q:=q||'    ''icon-gear'' as  icon, ';
q:=q||'   reestr.id_reestr as value, ';
q:=q||'   null as tooltip, ';
q:=q||'  ''javascript:pageItemValue(''||apex_escape.js_literal(reestr.ID_REESTR)||''); '' as link ';
q:=q||'   FROM (select reestr.* FROM reestr WHERE reestr.locked=''false'' )';
q:=q||'   LEFT JOIN char_attribute ON reestr.id_reestr=char_attribute.id_reestr AND char_attribute.id_char_att=312994 )';
q:=q||'   CONNECT BY prior reestr.id_reestr = reestr.id_parent  ';
q:=q||'  START WITH reestr.ID_REESTR=1  ';
 
 return q;
end;



мне кажется, какая то специфика есть в синтаксисе, читаю пока.
...
Рейтинг: 0 / 0
Дерево с title из двух таблиц
    #39702152
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А так?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
declare 
    q   varchar2(32767);
Begin
    q:=q'[
        SELECT CASE when connect_by_isleaf = 1 then 0 
        WHEN level = 1             then 1 
        else                           -1 
        end as status,    
        level, 
        reestr.long_number ||'   '|| reestr.unit_name ||'   '|| char_attribute.char_value	 as title,
        icon-gear as  icon, 
        reestr.id_reestr as value, 
        null as tooltip, 
        'javascript:pageItemValue('||apex_escape.js_literal(reestr.ID_REESTR)||')'  as link 
        FROM (select reestr.* FROM reestr WHERE reestr.locked=false )
        LEFT JOIN char_attribute ON reestr.id_reestr=char_attribute.id_reestr AND char_attribute.id_char_att=312994 
        CONNECT BY prior reestr.id_reestr = reestr.id_parent  
        START WITH reestr.ID_REESTR=1  
    ]';
    dbms_output.put_line(q);
    --return q;
end;
/
...
Рейтинг: 0 / 0
Дерево с title из двух таблиц
    #39702273
Kinoman1985
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
c-net, проблема у Вас с алиасами и скобками.
Код: 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.
DECLARE
  q varchar2(4000);
begin 

  q:='with reestr as (
  select null long_number, null unit_name, null id_reestr, null locked, null id_parent from dual),
     char_attribute as (
  select null id_reestr, null id_char_att, null char_value from dual)';
  q:=q||'   SELECT CASE when connect_by_isleaf = 1 then 0 ';
  q:=q||'       WHEN level = 1             then 1 ';
  q:=q||'       else                           -1 ';
  q:=q||'       end as status,  ';  
  q:=q||'  level, ';
  q:=q||'       reestr.long_number || '' '' || reestr.unit_name || '' '' || char_attribute.char_value	 as title,';
  q:=q||'    ''icon-gear'' as  icon, ';
  q:=q||'   reestr.id_reestr as value, ';
  q:=q||'   null as tooltip, ';
  q:=q||'  ''javascript:pageItemValue(''||apex_escape.js_literal(reestr.ID_REESTR)||''); '' as link ';
  q:=q||'   FROM (select reestr.* FROM reestr WHERE reestr.locked=''false'' ) reestr';
  q:=q||'   LEFT JOIN char_attribute ON reestr.id_reestr=char_attribute.id_reestr AND char_attribute.id_char_att=312994 ';
  q:=q||'   CONNECT BY prior reestr.id_reestr = reestr.id_parent  ';
  q:=q||'  START WITH reestr.ID_REESTR=1  ';

  --dbms_output.put_line(q);
  execute immediate q;

end;
/
...
Рейтинг: 0 / 0
Дерево с title из двух таблиц
    #39702403
c-net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kinoman1985,


увы :(, но идея похоже близкая, я уже несколько десятков вариантов переиграл :-(

Код: java
1.
 ORA-20999: Parsing returned query results in "ORA-20999: Failed to parse SQL query! <p>ORA-06550: line 5, column 10: ORA-32039: recursive WITH clause must have column alias list</p>".





Код: 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.
DECLARE
  q varchar2(4000);
begin 

  q:='with reestr as (
  select long_number,  unit_name,  id_reestr,  locked,  id_parent from reestr),
     char_attribute as (
  select  id_reestr,  id_char_att,  char_value from char_attribute)';
  q:=q||'   SELECT CASE when connect_by_isleaf = 1 then 0 ';
  q:=q||'       WHEN level = 1             then 1 ';
  q:=q||'       else                           -1 ';
  q:=q||'       end as status,  ';  
  q:=q||'  level, ';
  q:=q||'       reestr.long_number || '' '' || reestr.unit_name || '' '' || char_attribute.char_value	 as title,';
  q:=q||'    ''icon-gear'' as  icon, ';
  q:=q||'   reestr.id_reestr as value, ';
  q:=q||'   null as tooltip, ';
  q:=q||'  ''javascript:pageItemValue(''||apex_escape.js_literal(reestr.ID_REESTR)||''); '' as link ';
  q:=q||'   FROM (select reestr.* FROM reestr WHERE reestr.locked=''false'' ) reestr';
  q:=q||'   LEFT JOIN char_attribute ON reestr.id_reestr=char_attribute.id_reestr AND char_attribute.id_char_att=312994 ';
  q:=q||'   CONNECT BY prior reestr.id_reestr = reestr.id_parent  ';
  q:=q||'  START WITH reestr.ID_REESTR=1  ';

  --dbms_output.put_line(q);
  return q;

end;
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Дерево с title из двух таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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