当前位置:  开发笔记 > 数据库 > 正文

Oracle 9i:Synonymed表不存在?

如何解决《Oracle9i:Synonymed表不存在?》经验,为你挑选了1个好方法。

我创建了一个包,其中包含我计划从单独的应用程序调用的存储过程.存储过程将返回架构中所有视图和表的排序列表.为此,它对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的新手,所以请耐心等待.如果你能提供一些线索,或指出我正确的方向,我真的很感激.

提前致谢!



1> Raimonds Sim..:

使用ALL_TABLES和ALL_VIEWS而不是DBA_TABLES和DBA_VIEWS.所有用户都应该可以访问ALL_%视图.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有