|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.11.2014, 13:10 | #1 |
Пользователь
Регистрация: 13.11.2014
Сообщений: 12
|
Oracle, сложный запрос, помогите.
Добрый день, возник вопрос по написанию сложного запроса. Итак:
Существуют две таблицы ( fp_security_subject, fp_security_member) и вьюха (v_security_user). В таблицах достаточно большое количество записей. v_security_user содержит информацию о пользователях: ID | NAME | IDENT | EMP_ID ___________________________________ _________ 1000006300| ULTRA | ULTRA | 1000005865 1200039438| TRAVINA | TRAVINA | 1200039406 1300000492| LARIONOV | LARIONOV | 1300000488 ................................... .................................. fp_security_subject содержит информацию о ролях в системе: ID | NAME | TYPE_ID ___________________________________ ______ 1200020992|Руководитель Бэк-офиса|2 1200020993|Специалист Бэк-офиса|2 1301365712|Кредитный анализ (просмотр)|2 ................................... ....................... fp_security_member где указывается подчинение роли (причем указывается как подчинение сотрудника конкретной роли, так и подчинение между ролью и подролью) GROUP_ID| MEMBER_ID ______________________ 2| 1000006300 1| 1000006300 2| 1200002761 ................................ Был написан запрос на для вывода пользователей с указанием их ролей PHP код:
PHP код:
Собственно и вопрос, имеется ли возможность это сделать в одном запросе или сделать это вообще с текущей структурой таблиц. Ведь по идее, нужно во время выборки, для каждого подразделения в которое входит пользователь смотреть все подразделения в которое входи это подразделение и склеивать все в одну здоровую результирующую строку. Заранее спасибо за ответы. |
13.11.2014, 13:15 | #2 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Какова вложенность подразделений?
В разработке: воспроизводственный контур ИТ
|
13.11.2014, 13:16 | #3 |
Пользователь
Регистрация: 13.11.2014
Сообщений: 12
|
|
13.11.2014, 14:02 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Я могу ошибаться, но думаю что вот такое придется городить: https://docs.oracle.com/html/E26088_01/queries003.htm
P.S. Сам я когда-то делал похожее, но на PL\SQL целой процедурой.
I'm learning to live...
|
13.11.2014, 16:25 | #5 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Да, при неограниченной вложенности придется писать иерархический запрос с connect by/start with, а имя формировать функцией-оператором sys_connect_by_path.
В разработке: воспроизводственный контур ИТ
|
17.11.2014, 11:58 | #6 |
Пользователь
Регистрация: 13.11.2014
Сообщений: 12
|
Спасибо, разобрался. Добился нужного результата, несколькими простыми запросами.
|
26.11.2014, 12:54 | #7 |
Пользователь
Регистрация: 13.11.2014
Сообщений: 12
|
Добрый день,
Все таки появилась необходимость написания одним запросом. Написал, примерный запрос, который по идее должен выводить в правильном виде. Вся суть этого запроса, в том что каждому юзеру назначены роли. Они выводятся в столбце memberOF. У каждой роли могут быть родители. И в столбце memberall нужно для каждого юзера вывести полный список до корневого родителя роли. PHP код:
[Error] Execution (43: 39): ORA-00904: "A"."ID": недопустимый идентификатор Вопрос, можно ли как-нибудь передать a.ID во внутренний запрос? Так как мне нужно, чтобы он выполнялся для каждой строки. Или нужно по другому строить запрос? |
26.11.2014, 13:10 | #8 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Что такое concatenate?
В разработке: воспроизводственный контур ИТ
|
26.11.2014, 13:19 | #9 |
Пользователь
Регистрация: 13.11.2014
Сообщений: 12
|
Ну это просто не системная процедура для склеивания в одну строку записей.
Пример: Здесь пользователь имеет три роли: "Все пользователи;Риск-аналитик;Пользователь УРКБ" - выводится в столбец memberof В свою очередь Роль "Пользователь УРКБ" имеет две родительские роли и в столбец memberall должно выводиться: "Все пользователи;Риск-аналитик;Пользователь УРКБ; Модуль "Документооборот"; "АФСЗ" Последний раз редактировалось Dr_Jakero; 26.11.2014 в 13:23. |
26.11.2014, 14:13 | #10 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Как это две родительские роли? У вас там граф, что ли?
В разработке: воспроизводственный контур ИТ
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
сложный запрос | Deeller | БД в Delphi | 3 | 29.04.2011 19:25 |
Сложный запрос | templton | Microsoft Office Access | 8 | 21.04.2011 13:43 |
Сложный запрос | Kostya777 | Microsoft Office Access | 1 | 07.12.2010 12:02 |
Сложный запрос | nikolai_P | SQL, базы данных | 2 | 01.04.2010 01:21 |
Помогите создать сложный запрос (или как писать код для столбца запроса) | kukuanna | Microsoft Office Access | 0 | 24.07.2009 14:10 |