mju*_*ewu 5 sql oracle plsql ora-00942
我试图从函数中访问Oracle元数据表中的信息.例如(有目的地简化):
CREATE OR REPLACE PROCEDURE MyProcedure
IS
users_datafile_path VARCHAR2(100);
BEGIN
SELECT file_name INTO users_datafile_path
FROM dba_data_files
WHERE tablespace_name='USERS'
AND rownum=1;
END MyProcedure;
/
Run Code Online (Sandbox Code Playgroud)
当我尝试在sqlplus进程中执行此命令时,我收到以下错误:
LINE/COL ERROR
-------- -----------------------------------------------------------------
5/5 PL/SQL: SQL Statement ignored
6/12 PL/SQL: ORA-00942: table or view does not exist
Run Code Online (Sandbox Code Playgroud)
我知道用户可以访问该表,因为当我从同一个sqlplus进程执行以下命令时,它会显示预期的信息:
SELECT file_name
FROM dba_data_files
WHERE tablespace_name='USERS'
AND rownum=1;
Run Code Online (Sandbox Code Playgroud)
结果如下:
FILE_NAME
--------------------------------------------------------------------------------
/usr/lib/oracle/xe/oradata/XE/users.dbf
Run Code Online (Sandbox Code Playgroud)
有什么我需要做的不同吗?
确保这SELECT不仅是通过角色授权,而且用户实际上拥有授权。按角色授予的权限不适用于包。请参阅asktom.oracle.com 上的这篇文章。
另外,尝试sys.dba_data_files代替dba_data_files.
| 归档时间: |
|
| 查看次数: |
11252 次 |
| 最近记录: |