SQL и OIM — запросы к ролям пользователя

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

Если это поможет, я работаю с базой данных Oracle OIM. Ниже приведен запрос до внесения каких-либо изменений. Это выводит список пользователей, которые были названы за последние 7 дней.

select usr_login as "User Login", usr_emp_no as "Employee Number", usr_first_name as "First Name", usr_last_name as "Last Name", usr_status as "User Status", 
  to_char(USR_AUTOMATICALLY_DELETE_ON, 'MM/DD/YYYY') USR_AUTOMATICALLY_DELETE_ON, 
  to_char(usr_end_date, 'MM/DD/YYYY') usr_end_date,
  USR_DISPLAY_NAME,
  act.act_name as "Organization Name",
  USR_UDF_PS_EMPL_STATUS as "Employee Status"
from usr, act
where usr_end_date >= to_date(to_char(sysdate - interval '8' day, 'MM/DD/YYYY'), 'MM/DD/YYYY')
  and usr_end_date <= to_date(to_char(sysdate - interval '1' day, 'MM/DD/YYYY'), 'MM/DD/YYYY')
  and usr.act_key = act.act_key
order by usr_end_date, usr_login;

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

Если нет лучшего способа, я пытаюсь использовать этот запрос для возврата true или false:

define usr_login = '&usr_login'
select ugp.ugp_name, ugp.ugp_key, usr.usr_key, usr.usr_login, usr.usr_status
from usg, ugp, usr
where usr.usr_key = usg.usr_key and ugp.ugp_key = usg.ugp_key and
    upper(usr.usr_login) = upper('&usr_login')
    and ugp.ugp_name != 'ALL_USERS' -- I need to exclude the role "All Users"
order by usr.usr_status, ugp.ugp_name, usr.usr_login, usr.usr_status;

Ход мыслей, над которым я работаю, таков:

(NVL((select usr_login from usr where usr_login=UPPER('non-existantValue')),'False')) as "dumb", --Working if null(expression,ifnull, do this)This outputs as false

Но я очень открыт для предложений.

Чтобы сделать это более сложным, мне действительно нужно, чтобы это работало, используя второй запрос выше. Если у пользователя есть роль, верните true. Если Пользователь этого не делает, верните false.

Примечание. Я работаю в Oracle SQL Developer.

Любая помощь или предложения? Спасибо!


person Dean013    schedule 19.02.2020    source источник


Ответы (1)


Вы можете включить оператор CASE

select usr_login as "User Login", usr_emp_no as "Employee Number", usr_first_name as "First Name", usr_last_name as "Last Name", usr_status as "User Status", 
  to_char(USR_AUTOMATICALLY_DELETE_ON, 'MM/DD/YYYY') USR_AUTOMATICALLY_DELETE_ON, 
  to_char(usr_end_date, 'MM/DD/YYYY') usr_end_date,
  USR_DISPLAY_NAME,
  act.act_name as "Organization Name",
  USR_UDF_PS_EMPL_STATUS as "Employee Status",
  CASE WHEN (SELECT unique USR_KEY FROM USG WHERE UGP_KEY > 3 and USG.USR_KEY = USR.USR_KEY) is null THEN 'FALSE' ELSE 'TRUE' END AS "HAS ROLE"
from usr, act
where usr_end_date >= to_date(to_char(sysdate - interval '8' day, 'MM/DD/YYYY'), 'MM/DD/YYYY')
  and usr_end_date <= to_date(to_char(sysdate - interval '1' day, 'MM/DD/YYYY'), 'MM/DD/YYYY')
  and usr.act_key = act.act_key
order by usr_end_date, usr_login;
person Berkley Lamb    schedule 28.07.2020
comment
Я должен отметить 3 системные роли с ключами 1,2,3: СИСТЕМНЫЕ АДМИНИСТРАТОРЫ, ОПЕРАТОРЫ И ВСЕ ПОЛЬЗОВАТЕЛИ. - person Berkley Lamb; 28.07.2020