甲骨文 9i : Synonymed Table Does Not Exist?

标签 oracle package synonym ora-00942

我创建了一个包,其中包含一个我打算从单独的应用程序调用的存储过程。存储过程将返回架构中所有 View 和表的排序列表。为此,它对 DBA_TABLES 和 DBA_VIEWS 同义词执行简单的选择,如下所示:

CREATE OR REPLACE
PACKAGE BODY TITAN_ENTITY AS

  PROCEDURE GETSCHEMAOBJECTS (RESULTS IN OUT T_CURSOR)
  IS
    V_CURSOR T_CURSOR;
  BEGIN
    OPEN V_CURSOR FOR
       SELECT 'T' OBJECTTYPE, TABLE_NAME OBJECTNAME 
          FROM DBA_TABLES 
          WHERE OWNER = 'SONAR5'
       UNION ALL
       SELECT 'V' OBJECTTYPE, VIEW_NAME OBJECTNAME 
         FROM DBA_VIEWS 
         WHERE OWNER = 'SONAR5'
       ORDER BY OBJECTNAME;
    RESULTS := V_CURSOR;      

  END GETSCHEMAOBJECTS;

END TITAN_ENTITY;

我已验证存在问题的同义词,并且是公开的:

CREATE PUBLIC SYNONYM "DBA_TABLES" FOR "SYS"."DBA_TABLES"
CREATE PUBLIC SYNONYM "DBA_VIEWS" FOR "SYS"."DBA_VIEWS"

我的理解是,因为它们是公开的,所以我不需要任何进一步的权限就可以访问它们。如果这种理解是错误的,我希望有人能纠正我的想法并指出更准确的数据。

现在我的问题是:我可以在 Oracle SQL Developer 中打开工作表并从这些表中进行选择。我得到有意义的数据就好了(事实上是 567 行)。但是当我尝试执行存储过程时,Oracle 提示编译错误,如下所示:

Error(9,8): PL/SQL: SQL Statement ignored
Error(10,16): PL/SQL: ORA-00942: table or view does not exist

当我双击第二条错误消息时,SQL Developer 会将我带到第一个 FROM 子句(“FROM DBA_TABLES”)。

所以我很困惑。我非常了解 SQL Server,而且我是 Oracle 的新手,所以请多多包涵。如果您能提供一些线索,或为我指明正确的方向,我将不胜感激。

提前致谢!

最佳答案

使用 ALL_TABLES 和 ALL_VIEWS 而不是 DBA_TABLES 和 DBA_VIEWS。所有用户都应该可以访问 ALL_% 的 View 。

关于甲骨文 9i : Synonymed Table Does Not Exist?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/379672/

相关文章:

Oracle:仅插入物化 View

sql - TRIGGER AND COUNT 限制计数值

oracle - PL SQL 数字或值错误

python - 没有名为 'allauth.account.context_processors' 的模块

java - BlueJ 包不存在错误

list - Prolog - 寻找替代词(同义词)

SQL从min开始按顺序查找缺失的数字?

Java包移植

php - 获取一个词的同义词

elasticsearch - elasticsearch 7 中的同义词聚合 - 基于术语