Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 надо построить дерево  [new]
day-spring
Member

Откуда:
Сообщений: 71
Добрый день, есть запрос в sql, который строит дерево

select (lpad(' ',(level-1)*8,' '))||DESCRIPTION dscr
from table1
where --условие

помогите, пжл, построить его в pl/sql. Я вместо ' ' ставила ' ' не получается. Или тут lpad вообще не надо использовать
8 июн 11, 15:42    [10783831]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
NETClient
Member

Откуда:
Сообщений: 461
day-spring,

Фото в студию!
8 июн 11, 15:44    [10783852]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
day-spring
помогите, пжл, построить его в pl/sql.


with table1 as (select level lvl,level DESCRIPTION from dual connect by level<5)
select (lpad(' ',(lvl-1)*8,' '))||DESCRIPTION dscr
from table1;

variable c refcursor;

begin
 open :c for
  with table1 as (select level lvl,level DESCRIPTION from dual connect by level<5)
   select (lpad(' ',(lvl-1)*8,' '))||DESCRIPTION dscr
     from table1;
end;
/

print c;
8 июн 11, 16:55    [10784587]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
day-summer
Guest
day-spring
надо построить дерево


Обычно дерево садят (потом строят дом и выращивают сына )
8 июн 11, 17:13    [10784760]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
day-spring
Member

Откуда:
Сообщений: 71
NETClient,

select n, (lpad(' ',(level-1)*8,' '))||dscr
from table1
where status=1
and sn in (select t2.pn from table2 t2 where t2.status=1
connect by prior t2.PN=t2.SN
start with t2.pn =:p_division
)
connect by prior n=ssn
start with ssn is null;
9 июн 11, 07:29    [10786916]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
day-spring,

а что не получается в PL? И что должно получиться?
9 июн 11, 08:14    [10786942]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
day-spring
Member

Откуда:
Сообщений: 71
Сергей Арсеньев, мне надо древообразный выпадающийф список. Этот запрос в sql строит дерево, а в pl в выпадающем списке дерево не получается, если вместо ' ' ставлю ' ', lpad его не видит как пробела
9 июн 11, 08:26    [10786970]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
day-spring,

Мой пример отрабатывает правильно? У меня пробел виден.

И покажи код на PL (желательно нажав в форуме кнопочку SRC, чтобы легче читалось)
9 июн 11, 08:36    [10787018]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
day-spring
Member

Откуда:
Сообщений: 71
Сергей Арсеньев,
for rec in(select psubdivision n, (lpad(' ',(level-1)*8,' '))||DESCRIPTION   dscr  
                    from subdivision  
                   where status=1 
                     and sdivision in (select D_M.PDIVISION  from division d_m where status=1 
                                       connect by prior D_M.PDIVISION=D_M.SDIVISION
                                       start with d_m.pdivision =p_division
                                       ) 
                   connect by prior psubdivision=ssubdivision
                   start with ssubdivision is null);
       
         LOOP
           IF rec.n=p_psubdivision
            THEN 
              htp.p(htf.formSelectOption(rec.dscr,'selected', cattributes=>'value='||rec.n));
           ELSE
              htp.p(htf.formSelectOption(rec.dscr, cattributes=>'value='||rec.n));
           END IF;
         END LOOP;
9 июн 11, 08:44    [10787045]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
day-spring,

Результат идет в HTML?
<html>
 <body>
  <form>
   <select>
    <option>a</option>
    <option> a</option>
   </select>
  </form>
 </body>
</html>
9 июн 11, 08:55    [10787092]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
day-spring
Member

Откуда:
Сообщений: 71
Сергей Арсеньев, да
9 июн 11, 09:06    [10787133]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
day-spring,

Посмотрите, какой код получается в browser.
Вполне вероятно, что пробелы Вы передаете. Сравните:
<html>
 <body>
  <form>
   <select>
    <option value=1> 1</option>
    <option value=2><fixed> 2</fixed></option>
    <option value=3>nbspnbsp3</option>
   </select>
  </form>
 </body>
</html>
Перед каждым nbsp поставьте &.
9 июн 11, 09:19    [10787184]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
day-spring
Member

Откуда:
Сообщений: 71
Сергей Арсеньев,
нет, я каждый отдельно не вывожу, процедуру вызываю
<html>
 <body>
  <form>
   <td>
    p_list_dep(p_selectName=>'p_psubdivision',p_psubdivision=>p_psubdivision,p_division=>p_division);
   </td>
  </form>
 </body>
</html>
а в процедуре
s_list:=HTF.FORMSELECTOPEN(p_SelectName,cattributes=>'onChange="submit()" class=label');
--дальше то что я выше написала
htp.p(htf.formSelectClose);   
9 июн 11, 09:37    [10787258]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
day-spring,
9 июн 11, 09:51    [10787319]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
day-spring
Member

Откуда:
Сообщений: 71
Сергей Арсеньев,
?
9 июн 11, 09:56    [10787342]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
day-spring,

После вызова, что видит browser (какой элемент)?

В любом случае попробуйте поставить тег <fixed> в начало возвращаемой строки и </fixed> в конец. Ну или заменить ' ' на & nbsp
9 июн 11, 09:56    [10787343]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
day-spring
Member

Откуда:
Сообщений: 71
Сергей Арсеньев,
я так заменяла
for rec in(select psubdivision n, (lpad(' ',(level-1)*8,' '))||DESCRIPTION dscr
он   выводит на экран, не понемает что это пробел
9 июн 11, 10:22    [10787494]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
day-spring,

выводит на экран как?
В моем самом первом примере пробелы выводятся.

Если выводить в HTML, то он по стандарту должен схлопывать пробелы, если не указано обратное (например <fixed>).

Для примера замените ' ' на '_'. Тогда можно будет проверить, вывод.
9 июн 11, 11:08    [10787897]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
day-spring
Member

Откуда:
Сообщений: 71
Сергей Арсеньев,
я вместо ' ' пишу ' nbsp; ' с знаком & , он не видит эго как пробела, именно буквы выводит, '_' выводит
9 июн 11, 12:18    [10788665]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
day-spring,

Все понятно, только сейчас понял что означала фраза вместо ' ' ставлю ' '.
Сам главное на это наступил. Дело в том, что LPAD заменяет посимвольно и у него '&'||'nbsp;' это 6 символов:
with table1 as (select level lvl,level DESCRIPTION from dual connect by level<5)
select (lpad('&'||'nbsp;',(lvl-1)*8,'&'||'nbsp;'))||DESCRIPTION dscr
from table1;
А 8 не кратно 6
oracle
DSCR
1
&n 2
 &nbs 3
    4

либо дополнительно умножать на 6
with table1 as (select level lvl,level DESCRIPTION from dual connect by level<5)
select (lpad('&'||'nbsp;',(lvl-1)*8*6,'&'||'nbsp;'))||DESCRIPTION dscr
from table1;
, либо обрамлять результат <fixed> и оставлять пробелы,
либо заменять пробелы replace:
with table1 as (select level lvl,level DESCRIPTION from dual connect by level<5)
select replace((lpad(' ',(lvl-1)*8,' '))||DESCRIPTION,' ','&'||'nbsp;') dscr
from table1;
9 июн 11, 12:42    [10788926]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
day-spring
Member

Откуда:
Сообщений: 71
Сергей Арсеньев,
да, я не заметила что ' nbsp; ' с знаком & превращался ' ', получается в моем примере rec cursor не нужен? как этим
with table1 as (select level lvl,level DESCRIPTION from dual connect by level<5)
select (lpad('&'||'nbsp;',(lvl-1)*8*6,'&'||'nbsp;'))||DESCRIPTION dscr
from table1;
скользящий список построить?
9 июн 11, 12:56    [10789069]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
day-spring
Member

Откуда:
Сообщений: 71
Сергей Арсеньев,
Ураа! Получилось, просто
for rec in (select psubdivision n, (lpad(' ',(level-1)*8,' '))||DESCRIPTION   dscr
заменила
for rec in (select psubdivision n, replace((lpad(' ',(level-1)*8,' '))||DESCRIPTION,' ','&'||'nbsp;') dscr
и все вышло как и планировалось, большое спасибо за помощь, Сергей Арсеньев!
9 июн 11, 13:03    [10789126]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
Мир труд жвачка
Member

Откуда:
Сообщений: 1527
day-spring
и все вышло как и планировалось, большое спасибо за помощь, Сергей Арсеньев!


ну а теперь ждем...
9 июн 11, 13:05    [10789145]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
day-spring
Member

Откуда:
Сообщений: 71
Мир труд жвачка
day-spring
и все вышло как и планировалось, большое спасибо за помощь, Сергей Арсеньев!


ну а теперь ждем...


чего ждете?
9 июн 11, 13:08    [10789173]     Ответить | Цитировать Сообщить модератору
 Re: надо построить дерево  [new]
Мир труд жвачка
Member

Откуда:
Сообщений: 1527
day-spring
чего ждете?

ну как же чего... их, родненьких
9 июн 11, 13:10    [10789191]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить