我正在尝试从一个函数中访问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;
/当我试图在sqlplus进程中执行这个命令时,我得到了以下错误:
LINE/COL ERROR
-------- -----------------------------------------------------------------
5/5 PL/SQL: SQL Statement ignored
6/12 PL/SQL: ORA-00942: table or view does not exist我知道用户可以访问该表,因为当我从同一个sqlplus进程执行以下命令时,它会显示预期的信息:
SELECT file_name
FROM dba_data_files
WHERE tablespace_name='USERS'
AND rownum=1;这会导致:
FILE_NAME
--------------------------------------------------------------------------------
/usr/lib/oracle/xe/oradata/XE/users.dbf有什么我需要做的不同的事情吗?
发布于 2010-04-09 02:48:14
确保不仅通过角色授予SELECT,而且用户实际拥有该权限。按角色授予的权限不适用于包。请参阅此post at asktom.oracle.com。
此外,请尝试使用sys.dba_data_files而不是dba_data_files。
发布于 2015-10-29 01:04:15
指定WITH GRANT OPTION以使被授权者能够将对象权限授予其他用户和角色。
GRANT SELECT ON dba_data_files TO YOUR_USER WITH GRANT OPTION;发布于 2010-04-09 02:49:53
您是否尝试过在表名前加上sys.前缀,如
FROM sys.dba_data_fileshttps://stackoverflow.com/questions/2602536
复制相似问题