gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:24:40 27 4
gpt4 key购买 nike

我正在尝试从函数内访问 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

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

最佳答案

确保 SELECT不仅是通过授权角色 ,但用户实际上拥有授权。按角色授予的权限不适用于包。看到这个 post at asktom.oracle.com .

另外,试试 sys.dba_data_files而不是 dba_data_files .

关于sql - 如何从 PL/SQL 函数或过程内部访问 Oracle 系统表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2602536/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com