Иерархический запрос для поиска корня и возврата единственного пути - PullRequest
0 голосов
/ 02 июля 2018

Я работаю с базой данных черного ящика, которую я не создал, и не могу редактировать. Кроме того, этот запрос выбора должен выполняться в отчетах jasper, поэтому я не могу написать хранимую процедуру.

У меня есть система инвентаризации, которая использует таблицу сопоставления родитель / потомок и выдает новые ключи каждый раз, когда происходит изменение состояния инвентаря. Я работаю с 2 таблицами, это важные поля и упрощенный запрос:

allinv, который содержит поля: invmaster invkey

и

pclink, который содержит поля (соответствует invkeys для allinv выше): родитель ребенок

Следующий запрос работает для одного предмета инвентаря и показывает прогрессию, как и ожидалось, но требует знания корня и предоставления главного ключа.

Тогда мой вопрос: если мне нужно вернуть все элементы инвентаризации (удалить предложение where) с этой структурой, есть ли способ автоматического определения корневого элемента и установки «начала с» или чего-то, что будет работать аналогичным образом? так что я могу использовать это как подзапрос к аналитическому окну запроса, чтобы по пути извлекать корень, листы и статусы?

select
  ai.invkey AS sxkey,
  stl.parent as parent,
  stl.child as child,
  level as lvl,
  CONNECT_BY_ISLEAF as IsLeaf,
  CONNECT_BY_ROOT(STL.parent) as root
from eprog.allinv ai
  left join eprog.pclink stl
    on ai.invkey = stl.parent
where invmasterkey = 'SA3010401'
start with stl.parent = '#gRR5'
connect by nocycle prior stl.child = stl.parent;

1 Ответ

0 голосов
/ 03 июля 2018

Я не уверен, что полностью понимаю ваш вопрос, но вы, безусловно, можете сделать:

START WITH stl.parent IS NULL

чтобы начать иерархический запрос с этих строк.

...