Объединение трех операторов выбора для обеспечения единого вывода - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь получить отчет о ролях БД в базе данных Oracle, который должен select "DB Name", "Hostname", Grantee, Granted_role. Для этого были подготовлены три отбора:

select name from v$database;

select host_name from v$instance;

select distinct(grantee), granted_role from dba_role_privs order by 1;

Вопрос в том, можно ли объединить их и создать единую таблицу отчетности:

Server-Name;DB name;Role;Userid

Может кто-нибудь дать какие-нибудь подсказки? Спасибо!

1 Ответ

0 голосов
/ 21 января 2019

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

SELECT DISTINCT (SELECT NAME
             FROM   v$database) db_name,
            (SELECT host_name
             FROM   v$instance) host_name,
            grantee,
            granted_role
FROM   dba_role_privs
ORDER  BY 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...