9

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

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;在简单的编辑器中完成。任何人都可以帮我解决这个问题。

4

3 回答 3

16

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

本文所述

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
于 2012-04-11T07:10:21.543 回答
1

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

不幸的是,通过角色获得的特权在运行 PL/SQL 时是无效的。

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

于 2012-04-11T07:10:36.490 回答
-2

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

于 2013-12-09T14:34:36.397 回答