CftClub.ru
Клуб специалистов ЦФТ-Банк

цикл

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Псевдоним123
Участник - экстремал


Вступление в Клуб: 05.06.2018
СообщениеПн Авг 06, 2018 18:00   цикл Ответить с цитатой
Полезность: Нет оценки
добрый день.

не подскажете, почему цикл проходит только один круг?

Код:
l_high := p_kode;
      for   
      (select tt(tt.[name]      : tt_name   
             , tt.[high]       : tt_high
             --, tt.[]
         )
       in [depart] all where /*tt.[high] is  null and*/ /*tt.[ code] is not null and*/ tt%id = l_high
       )
      loop
         l_high :=  tt.[tt_high]; 
         l_name := l_name || ' ' || tt.[tt_name];
         
      end loop;
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеПн Авг 06, 2018 18:02    Ответить с цитатой
Полезность: Нет оценки
если тебе нужен иерархический seleсt то должны быть условия start with ..
,connect by ...

поищи примеры в админе словаря по этим ключевым словам
Псевдоним123
Участник - экстремал


Вступление в Клуб: 05.06.2018
СообщениеВт Авг 07, 2018 10:48    Ответить с цитатой
Полезность: Нет оценки
мне необходимо показать полный "путь" от подразделения до ОО/филиала.

цикл почему-то отображает только одну родительскую запись
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеВт Авг 07, 2018 11:27    Ответить с цитатой
Полезность: Нет оценки
Посмотри по F12.
У тебя сначала курсор открывается с исходным значением l_high. И потом только данные выбираются.
А то, что потом изменяешь его значение, на курсор уже не влияет.
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеСр Авг 08, 2018 06:10    Ответить с цитатой
Полезность: 2
Псевдоним123 пишет:
мне необходимо показать полный "путь" от подразделения до ОО/филиала.

Вот с этого и надо начинать! Формулировка цели - первое дело.

Псевдоним123 пишет:
цикл почему-то отображает только одну родительскую запись

используем иерархический запрос.

1. для иллюстрации как работает иерархический запрос, посмотрим все записи
Код:

select level, c_code, id, c_high, SYS_CONNECT_BY_PATH(id, '/')
from z#depart
start with id = l_high
connect by prior c_high = id


2. Ну и поскольку тебе нужна только одна запись, то итоговый запрос станет таким:
Код:

select SYS_CONNECT_BY_PATH(id, '/')
from z#depart
where c_high is null
start with id = l_high
connect by prior c_high = id


того же эффекта можно добиться с помощью аналитической функции
Код:

select
    listagg(id, '/') within group (order by level)
from z#depart
start with id = l_high
connect by prior c_high = id
;
Псевдоним123
Участник - экстремал


Вступление в Клуб: 05.06.2018
СообщениеСр Авг 08, 2018 09:13    Ответить с цитатой
Полезность: Нет оценки
вот так я сделал

Код:
while l_high is not null loop
         select tt(tt.[name]       : tt_name   
                 , tt.[high]    : tt_high
                 , tt%id      : tt_id
               )
          in ::[depart]
          where tt%id = l_high
          into l_name1, l_high_id, l_idd;
          l_id := l_idd;
          l_high := l_high_id;
          l_name := l_name || ' ' || name1;
      end loop;
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеСр Авг 08, 2018 10:06    Ответить с цитатой
Полезность: 1
Псевдоним123 пишет:
вот так я сделал

Код:
while l_high is not null loop
         select tt(tt.[name]       : tt_name   
                 , tt.[high]    : tt_high
                 , tt%id      : tt_id
               )
          in ::[depart]
          where tt%id = l_high
          into l_name1, l_high_id, l_idd;
          l_id := l_idd;
          l_high := l_high_id;
          l_name := l_name || ' ' || name1;
      end loop;

Ностальгия... я так же писала лет так ...дцать назад...
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru