Oracle 18 c count (*) из dba_tables возвращает ноль даже после предоставления выбранных грантов - PullRequest
0 голосов
/ 06 августа 2020

Мы пытаемся получить количество таблиц из dba_tables в процедуре pl / sql, и счет возвращается как ноль. Мы можем видеть количество просмотров записей dba_tables через sql разработчика. Однако через код pl / sql он возвращается как ноль.

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

declare
l_count number :=0;
begin
select count(1) into l_count from dba_tables where owner ='USER1';
dbms_output.put_line('count for user 1 is ' || l_count);
l_count := 0;
select count(1) into l_count from dba_tables where owner ='USER2';
dbms_output.put_line('count for user 2 is ' || l_count);
end;

вывод, который мы получаем: count для пользователя 1 равен 0 count для пользователя 2 равен 0

Результат, который мы получаем для тех же запросов от sql разработчик:

select count(1) from dba_tables where owner ='USER1'; --result is 5892
select count(1) from dba_tables where owner ='USER2'; --result is 6124

Заранее спасибо, было бы здорово, если бы кто-нибудь мог мне с этим помочь.

1 Ответ

1 голос
/ 06 августа 2020

Грант на dba_tables должен быть предоставлен пользователю, который владеет / запускает процедуру.

Он работает в SQL, если вызывающий имеет грант через роль, но в PL / SQL разрешение должно быть направлено непосредственно на имя пользователя.

...