加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ORA-00942: table or view does not exist

(2012-03-02 15:16:03)
标签:

oracle

同义词

synonym

ora-00942

杂谈


在当前用户CL_INTERFACE下删除一张“表”的时候的报错:
SQL> drop table insured;
drop table insured
           *
ERROR at line 1:
ORA-00942: table or view does not exist

查询结果“表”中是有数据的:
SQL> select count(*) from insured;

  COUNT(*)
----------
  10385953

原因:这里的"insured"不一定是表。按以下方法排查:
1:查看类型和所有者:
SQL>  select owner, object_name,object_type from dba_objects where object_name='INSURED';
OWNER           OBJECT_NAME    OBJECT_TYPE
-----------------------------------------------
PUBLIC          INSURED        SYNONYM
CL_BIZ1         INSURED        SYNONYM
CL_BIZ2         INSURED        SYNONYM
CL_CNTR1        INSURED        TABLE PARTITION
CL_CNTR1        INSURED        TABLE PARTITION
CL_CNTR1        INSURED        TABLE
CL_CNTR2        INSURED        TABLE
CL_INTERFACE    INSURED        SYNONYM

看到INSURED存在三种类型。它是CL_CNTR1下面的表或表分区。如果要删除该表,应到CL_CNTR1用户下操作。(传送门:oracle partition table--http://blog.sina.com.cn/s/blog_621a2bdf0100joqa.html)

现在无法删除是因为在当前用户下,它是一个同义词SYNONYM。下面我们查查它在当前用户的同义词是怎么定义的。

2:get出可以查询同义词创建语句的语句:
SQL>select 'select dbms_metadata.get_ddl(''SYNONYM'''||','||''''||SYNONYM_NAME||''''||')'||' from dual;' from user_SYNONYMS where SYNONYM_NAME='INSURED';

得到:
select dbms_metadata.get_ddl('SYNONYM','INSURED') from dual;

3:运行第2步得到的结果:
SQL>select dbms_metadata.get_ddl('SYNONYM','INSURED') from dual;
得到:
CREATE OR REPLACE SYNONYM "CL_INTERFACE"."INSURED" FOR "CL_BIZ1"."INSURED"

以上得到的语句表明当前用户下的INSURED是从"CL_BIZ1"."INSURED"创建的同义词。

最近初接触一些oracle数据库的操作,遇到很多问题,显示出很多无知,也愿记录下一些,以励进步,不妥之处,欢迎指正交流。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有