查询PL SQL游标中的DBA_TABLES和USER_TABLES

时间:2018-04-10 03:15:00

标签: oracle cursor ora-00942

我在PLSQL程序中有一个游标可以从ADD passenger-enterprise-license /etc/passenger-enterprise-license RUN echo deb https://download:<OUR_KEY>@www.phusionpassenger.com/enterprise_apt xenial main > /etc/apt/sources.list.d/passenger.list RUN apt-get update && apt-get install -y -o Dpkg::Options::="--force-confold" passenger-enterprise nginx-extras DBA_TABLES中选择。

USER_TABLES

然而程序抱怨

  

“ORA-00942表或视图不存在”

执行期间

2 个答案:

答案 0 :(得分:1)

用户必须拥有该视图的SELECT权限 要检查用户是否具有针对此视图的SELECT权限,请以此用户身份登录并运行以下查询:

select * from user_tab_privs WHERE table_name = 'DBA_TABLES';

如果此查询返回none,则该用户无权访问该视图,但无法查看该视图。

要将此权限授予该用户,请以SYS或SYSTEM身份登录,然后发出:

GRANT select ON DBA_TABLES TO username;

在此之后,用户应该看到如下所示的结果,并且可以访问该视图:

select table_name, privilege from user_tab_privs WHERE table_name = 'DBA_TABLES';

TABLE_NAME PRIVILEGE                               
---------- ---------
DBA_TABLES SELECT                                  

答案 1 :(得分:0)

如果您只需要DBA_TABLES,请遵循krokodilko答案中的步骤。如果您需要查询多个数据字典对象,则SELECT ANY DICTIONARY特权是另一种选择。它授予对DBA视图(包括DBA_TABLES)的选择访问权限。以SYSTEM身份登录并运行:

grant select any dictionary to your-username;

SELECT ANY DICTIONARY特权允许用户查询SYS模式中的任何数据字典对象,但以下情况除外:DEFAULT_PWD $,ENC $,LINK $,USER $,USER_HISTORY $和XS $ VERIFIERS。

偶然地,问题中的c1游标可能不需要访问DBA_TABLES。以下查询应产生相同的结果:

CURSOR c1 IS
  SELECT TABLE_NAME FROM USER_TABLES WHERE IOT_TYPE IS NOT NULL;
相关问题