Как я могу сгенерировать вывод Oracle на основе Parent ID? - PullRequest
0 голосов
/ 26 августа 2018

Моя база данных Oracle выглядит следующим образом:

DR_ID  |  DR_PATH    |  DR_FILE_OR_FOLDER  |  DR_PARENT_FOLDER_ID
---------------------------------------------------------------
  1    |  one.txt    |  File               |  0
  2    |  two        |  Folder             |  0
  3    |  three.txt  |  File               |  0
  4    |  four.txt   |  File               |  2
  5    |  five       |  Folder             |  2
  6    |  six        |  Folder             |  5
  7    |  seven.txt  |  File               |  6

Эта таблица представляет структуру папок, а DR_ID - это первичный ключ с последовательностью.DR_PATH - это имя файла или папки, DR_FILE_OR_FOLDER - это тип (файл или папка), а DR_PARENT_FOLDER_ID - идентификатор родительского элемента (DR_ID).

Мне нужно создать запрос, чтобы получить относительный путьфайл папки на основе переданного DR_ID.

Пример: - Если я передам DR_ID 7, мне нужно получить вывод в виде two\five\six\seven.txt

Как мне создатьзапросить это требование?

1 Ответ

0 голосов
/ 26 августа 2018

Вот один из вариантов:

SQL> with test (dr_id, dr_path, dr_parent_folder_id) as
  2  (select 1, 'one.txt'  , 0 from dual union all
  3   select 2, 'two'      , 0 from dual union all
  4   select 3, 'three.txt', 0 from dual union all
  5   select 4, 'four.txt' , 2 from dual union all
  6   select 5, 'five'     , 2 from dual union all
  7   select 6, 'six'      , 5 from dual union all
  8   select 7, 'seven.txt', 6 from dual
  9  )
 10  select listagg(dr_path, '\') within group (order by level desc) result
 11  from test
 12  connect by dr_id = prior dr_parent_folder_id
 13  start with dr_id = &par_dr_id;
Enter value for par_dr_id: 7

RESULT
--------------------------------------------------------------------------------
two\five\six\seven.txt

SQL> /
Enter value for par_dr_id: 5

RESULT
--------------------------------------------------------------------------------
two\five

SQL>
...