首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从PL/SQL函数或过程内部访问Oracle系统表?

问如何从PL/SQL函数或过程内部访问Oracle系统表?
EN

Stack Overflow用户
提问于 2010-04-09 02:43:57
回答 4查看 12.1K关注 0票数 6

我正在尝试从一个函数中访问Oracle元数据表中的信息。例如(有意简化):

代码语言:javascript
复制
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进程中执行这个命令时,我得到了以下错误:

代码语言:javascript
复制
LINE/COL ERROR
-------- -----------------------------------------------------------------
5/5      PL/SQL: SQL Statement ignored
6/12     PL/SQL: ORA-00942: table or view does not exist

我知道用户可以访问该表,因为当我从同一个sqlplus进程执行以下命令时,它会显示预期的信息:

代码语言:javascript
复制
SELECT file_name
    FROM dba_data_files
    WHERE tablespace_name='USERS'
    AND rownum=1;

这会导致:

代码语言:javascript
复制
FILE_NAME
--------------------------------------------------------------------------------
/usr/lib/oracle/xe/oradata/XE/users.dbf

有什么我需要做的不同的事情吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-09 02:48:14

确保不仅通过角色授予SELECT,而且用户实际拥有该权限。按角色授予的权限不适用于包。请参阅此post at asktom.oracle.com。

此外,请尝试使用sys.dba_data_files而不是dba_data_files。

票数 5
EN

Stack Overflow用户

发布于 2015-10-29 01:04:15

指定WITH GRANT OPTION以使被授权者能够将对象权限授予其他用户和角色。

代码语言:javascript
复制
GRANT SELECT ON dba_data_files TO YOUR_USER WITH GRANT OPTION;
票数 1
EN

Stack Overflow用户

发布于 2010-04-09 02:49:53

您是否尝试过在表名前加上sys.前缀,如

代码语言:javascript
复制
FROM sys.dba_data_files
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2602536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档