PL/SQL:ORA-00942:表或视图不存在V $ SQL

Gau*_*oni 8 database plsql oracle10g oracle11g

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

select sql_id into v_sql_id from v_$sql where sql_text =v_sql;
Run Code Online (Sandbox Code Playgroud)

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

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

另一件事我可以select sql_id from v_$sql where sql_text =v_sql;用简单的编辑器.任何人都可以帮助我.

Kor*_*urk 13

数据库字典相关或系统表(在本例中为v_ $ sql)归Oracle sys用户所有,需要特殊权限才能访问它们.您需要登录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
Run Code Online (Sandbox Code Playgroud)

因此,请尝试以下方法在所有dictionay视图上授予SELECT,以便您可以在pl/sql块中使用它.

grant select any dictionary to USERNAME
Run Code Online (Sandbox Code Playgroud)