Oracle 18c count(*) 来自 dba_tables returns 即使在提供 select 资助后也是如此

Oracle 18c count(*) from dba_tables returns zero even after providing select grants

我们正在尝试在 pl/sql 过程中从 dba_tables 获取表的计数,并将 returns 的计数设为零。我们可以通过 sql 开发人员查看 dba_tables 的记录计数。但是,通过 pl/sql 将此 returns 编码为零。

请在下面找到示例代码,我们目前在同一个数据库上有 2 个模式 运行。我们在 dba_tables 上为两个架构用户提供了 select 资助。

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

在此先感谢,如果有人能帮助我解决这个问题,那就太好了。

dba_tables 的授权必须授予 owns/is 运行 程序的用户。

如果调用者通过角色获得授权,它在 SQL 中有效,但在 PL/SQL 中,授权必须直接指向用户名。