2016-10-27 1 views
0

Я делаю проект JavaFx, подключенный к источнику данных Documentum. скажем, у меня есть набор групп: group1, group2, group3 Как я могу запросить все acl_names от dm_acl, у кого есть only and exactly этих групп в качестве их r_acceesor_name. Например, используя следующий запрос я могу получить r_accessor_name конкретного ACL:Как получить объекты в dm_acl, которые одновременно предоставляют одинаковые наборы разрешений

select r_acceessor_name from dm_acl where object_name = 'My_acl_name' enable (row_based) 

и выход:

group1 
group2 
group3 

Но то, что я хочу сделать, это реверсе .I've пробовал следующий запрос:

select object_name from dm_acl where r_accessor_name = 'group1' or r_accessor_name = 'group2' or r_accessor_name = 'group3' enable (row_based) 

но проблема с выводом является то, что это слишком общий характер, который имеет смысл из-за ключевого слова OR я попытался это:

select object_name from dm_acl where r_accessor_name = 'group1' and r_accessor_name = 'group2' and r_accessor_name = 'group3' enable (row_based) 

который слишком специфичны ==> нулевой выход

+0

Вы сделали очень запутанный вопрос. Попробуйте представить свой вопрос своей бабушке, а затем напишите здесь. Сначала вам нужно или нужно решить проблему, а затем то, что вы сделали. – Miki

+0

Вопрос @Miki обновляется –

+0

Кстати, на каждом вопросе, который вы делаете относительно Documetnum, вы начинаете с вашего проекта. Это не имеет значения. – Miki

ответ

1

Вы спутать себя больше, чем вы можете думать. Каждый объект ACL имеет как минимум две записи: dm_owner и dm_world, где первый представляет владельца репозитория, а последний представляет каждого пользователя в репозитории.

Из-за этого ваша цель

... все acl_names от dm_acl который имеет только и именно эти группы ...

не может быть достигнута. Однако, кроме этого, ваш запрос

SELECT object_name FROM dm_acl 
WHERE r_accessor_name = 'group1' 
AND r_accessor_name = 'group2' 
AND r_accessor_name = 'group3' 
ENABLE (ROW_BASED) 

это лучшее, что вы можете получить. Ваша проблема в том, что у вас действительно нет ACL в вашем репозитории, который содержит по крайней мере эти 3 группы. Это приведет вас к вашему первоначальному вопросу: либо вы сделали неверную презумпцию, либо попытались слишком много, чтобы обобщить свой вопрос о том, что вы опустили важную его часть. ;)

+2

Я думаю, что ваш запрос всегда возвращает 0 строк, поскольку условия в предложении WHERE не могут совпадать. Когда вы используете подсказку ROW_BASED, каждая строка в результирующем наборе имеет ровно одно значение для повторения атрибута, поэтому, когда вы пытаетесь сказать, дайте мне объект с именем «a» и «b», он никогда не вернет вам ничего – Sergi

1

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

SELECT object_name FROM dm_acl 
WHERE r_accessor_name IN ('group_A', 'group_B', 'group_C') 
GROUP BY object_name 
HAVING COUNT(DISTINCT r_accessor_name) = 2 
ENABLE (row_based) 

Попробуйте и посмотреть, если он будет работать.

Смежные вопросы