Oracle 18c count(*) из dba_tables возвращает ноль даже после предоставления выборочных грантов

Мы пытаемся получить количество таблиц из 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;

вывод, который мы получаем: счетчик для пользователя 1 равен 0 счетчик для пользователя 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

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


person user3571090    schedule 06.08.2020    source источник
comment
Доходит до того же, но стандартное SQL-выражение count(*).   -  person William Robertson    schedule 06.08.2020


Ответы (1)


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

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

person Alistair Wall    schedule 06.08.2020
comment
Спасибо!!! Мы предоставили права выбора непосредственно имени пользователя, и это сработало. - person user3571090; 06.08.2020
comment
Вы должны принять ответ, поскольку он решил вашу проблему. - person Sujitmohanty30; 06.08.2020