【问题标题】:PL/SQL: ORA-00942: table or view does not exist V$SQLPL/SQL: ORA-00942: 表或视图不存在 V$SQL
【发布时间】:2012-04-23 11:26:51
【问题描述】:

我创建了一个过程并在其中使用了以下语句。

select sql_id into v_sql_id from v_$sql where sql_text =v_sql;

我收到以下错误PL/SQL: ORA-00942: table or view does not exist

我已经检查了它的所有者的同义词是PUBLIC,所以它应该在这种情况下运行,但它不起作用。

另一件事我可以在简单的编辑器中select sql_id from v_$sql where sql_text =v_sql; 这个。任何人都可以帮我解决这个问题。

【问题讨论】:

  • 在我的系统上,视图被称为v$sql,而不是v_$sql
  • @Codo:仅在我的 V$sql 上,它在 sys 架构下

标签: database plsql oracle10g oracle11g


【解决方案1】:

数据库字典相关或系统表(本例中为 v_$sql)归 Oracle sys 用户所有,需要特殊权限才能访问它们。您需要以 sysdba user 身份登录到 oracle 数据库或获得这些特权(您的 DBA 可能会帮助您)才能访问数据字典视图。

this article中所述

The problem is that procedures don't respect roles; only directly granted rights 
are respected. So, that means that table_owner has to regrant the right to select

因此,请尝试以下操作以在所有字典视图上授予 SELECT,以便您可以在 pl/sql 块中使用它。

grant select any dictionary to USERNAME

【讨论】:

  • 关于以 sysdba 身份登录,您可以通过 sqlplus 执行此操作:sqlplus "/ as sysdba"
【解决方案2】:

很可能您正在使用的用户通过角色而不是直接的选择权限来访问视图。

不幸的是,通过角色获得的权限在运行 PL/SQL 时是不活动的。

您需要让您的 DBA 直接将 SELECT 权限授予您的用户。

【讨论】:

  • 好的,我会问我的 DBA 的。
【解决方案3】:

查看我的回答here。这可能是因为您在某处使用了特定的大写字母

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 2019-03-27
    • 2015-08-06
    • 2013-04-14
    • 2016-11-05
    • 1970-01-01
    • 2019-01-22
    相关资源
    最近更新 更多