|
|
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Всем привет. Имеется следующее задание: Для каждого сотрудника выбрать всех его начальников по иерархии. Вывести поля: код сотрудника, имя сотрудника (фамилия + имя через пробел), код начальника, имя начальника (фамилия + имя через пробел), кол-во промежуточных начальников между сотрудником и начальником из данной строки выборки. Если у какого-то сотрудника есть несколько начальников, то для данного сотрудника в выборке должно быть несколько строк с разными начальниками. Упорядочить по коду сотрудника, затем по уровню начальника (первый – непосредственный начальник, последний – руководитель организации). Знаю как его выполнить с помощью рекурсивного запроса: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. но не могу понять как это задание можно выполнить без рекурсивного запроса. Подскажите пожалуйста в какую сторону копать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 21:04 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Person2713Знаю как его выполнить с помощью рекурсивного запроса: но не могу понять как это задание можно выполнить без рекурсивного запроса. Твой запрос нe рекурсивный а иерархический. Ну а без иерархического/рекурсивного запроса если нaриcовать пaру функций но внутри их все равно придется ползать от сотруника к начальнику в цикле что по-сути та-же иерархия/рекурсия. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 21:38 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Person2713, Если для получения родительских записей нельзя использовать connect by и recursive subquery factoring, то задачу можно решить итеративной моделью (для общего случая) или pattern matching (при условии что айдишники увеличиваются с увеличением уровня). Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 22:42 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopзадачу можно решить итеративной моделью А итеративнaя модель это не рекурсия? Через match_recognize врядли получится - не ползает он через ту-же строку дважды. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 23:22 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
SY, помой-му иерархический и рекурсивный запрос одно и тоже. Я вроде читал, что Oracle вместо рекурсивный запрос использует иерархический запрос. Поправьте меня если ошибаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2017, 08:00 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, То что вы написали не является ли "рекурсивным запросом с подзапросом with" ( http://citforum.ru/database/oracle/recursive/ ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2017, 08:05 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Person2713То что вы написали не является ли "рекурсивным запросом с подзапросом with" ну покажи нам, где там якорная часть, где рекурсивная... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2017, 08:08 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
SYdbms_photoshopзадачу можно решить итеративной моделью А итеративнaя модель это не рекурсия? Через match_recognize врядли получится - не ползает он через ту-же строку дважды. SY.Итеративная модель - это цикл while (если речь про обход дерева). Кстати, любую рекурсию можно реализовать через не рекурсию. Я даже устраивал троллинг на эту тему в форуме работа 13199084 , но не взлетело - там любители поговорить, а не сравнивать производительность. Ползать в две стороны не выйдет, но я написал в скобочках ограничения для решения выше. PS. Мы своими разговорчиками только запутаем ТС. У него и так полная каша в голове. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2017, 12:14 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
объясните пожалуйста чем отличаются иерархические запросы от рекурсивных в oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2017, 16:41 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Person2713объясните пожалуйста чем отличаются иерархические запросы от рекурсивных в oracleОткрываешь синтаксис SELECT и на странице Ctr + F по словам "recursive" и "hierarchical". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2017, 16:46 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Спасибо dbms_photoshop, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2017, 18:20 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Переписал запрос через рекурсию, правда есть одно но, не могу понять как выводить для каждого сотрудника в отдельной строчке руководителей. Например, есть иерархия /Петров/Иванов/Козлов/Петряев. В итоге для Петряева должны получить результат: Сотрудник Руководитель Петряев Козлов Петряев Иванов Петряев Петров Подскажите пожалуйста какие есть пути решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2017, 23:16 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Person2713Переписал запрос через рекурсию, правда есть одно но, не могу понять как выводить для каждого сотрудника в отдельной строчке руководителей. Например, есть иерархия /Петров/Иванов/Козлов/Петряев. В итоге для Петряева должны получить результат: Сотрудник Руководитель Петряев Козлов Петряев Иванов Петряев Петров Подскажите пожалуйста какие есть пути решения. А в целом должно быть так: Сотрудник Руководитель Иванов Петров Козлов Иванов Козлов Петров Петряев Козлов Петряев Иванов Петряев Петров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2017, 23:18 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Person2713, prior dbms_photoshop, мне кажется скоро можно будет давать ссылки на твою книгу вместо документации... по крайней мере не будет вопросов про русский язык)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 09:56 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Vint, priop используется в иерархическом запросе. А у меня сейчас рекурсивный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 20:29 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Person2713А в целом должно быть так Код: 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Или с индентацией: Код: 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 21:04 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
SY, Спасибо за примеры, но мне надо сделать иерархический запрос Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. c помощью рекурсии. Сделал вот часть: Код: 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. 29. 30. 31. 32. 33. 34. 35. и вот не могу понять сотрудника выводить всех его начальников в отдельных строках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 21:17 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Person2713и вот не могу понять сотрудника выводить всех его начальников в отдельных строкахЯ смотрю ты делаешь успехи и смог найти "Recursive Subquery Factoring: Examples" по ссылке, что я дал. Теперь перейди ко второму примеру и увидь там "MGR_LIST". Неужели это так сложно? Если так туго идет - лучше меняй специальность, потом потратишь пять лет, а работу найти невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 21:43 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Person2713Спасибо за примеры, но мне надо c помощью рекурсии. Код: 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2017, 22:14 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, Каюсь поленился) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 06:30 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Person2713dbms_photoshop, Каюсь поленился) Второй пример не сильно помог, так как показывается как вывести целый путь. Но всё равно намёк понял буду документацию читать). SY, спасибо за пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2017, 06:58 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Ребят, знаю что всем надоел. Но все-таки подскажите как решается вот эта задача: Для каждого заказчика выбрать в виде строки через запятую даты его заказов. Для конкатенации дат заказов использовать sys_connect_by_path (иерархический запрос). Для отбора «последних» строк использовать connect_by_isleaf. В данной задаче надо вывести информацию по заказчикам с помощью иерархического запроса, правда в самой таблице иерархии никакой нет. В oracle docs нашел пример, как вывести инфу об одном заказчике, а как для всех не могу понять. Вот все что пока сделал: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 07:11 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Person2713Для конкатенации дат заказов использовать sys_connect_by_path (иерархический запрос).Это устаревшее бессмысленно академическое баловство. RTFM LISTAGG Person2713 Код: plsql 1. Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 07:40 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
ElicPerson2713Для конкатенации дат заказов использовать sys_connect_by_path (иерархический запрос).Это устаревшее бессмысленно академическое баловство. RTFM LISTAGG Person2713 Код: plsql 1. Код: plsql 1. Elic спасибо за решение, но всё же мне нужен иерархический запрос, так как это одно из заданий лабы. А ещё лучше не решение а объяснение как это можно сделать. Не могу понять как надо мыслить, чтобы такие запросы писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 18:35 |
|
||
|
Выполнение рекурсивного запроса с помощью не рекурсивных функций
|
|||
|---|---|---|---|
|
#18+
Person2713 Для каждого заказчика выбрать в виде строки через запятую даты его заказов. Для конкатенации дат заказов использовать sys_connect_by_path (иерархический запрос). Для отбора «последних» строк использовать connect_by_isleaf. А ещё лучше не решение а объяснение как это можно сделать. На это можно дать только обьяснение почему так лучше не делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 19:11 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39399679&tid=1886392]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 431ms |

| 0 / 0 |
