ORA-00942: table or view does not exist
(2012-03-02 15:16:03)
标签:
oracle同义词synonymora-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;
----------
原因:这里的"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数据库的操作,遇到很多问题,显示出很多无知,也愿记录下一些,以励进步,不妥之处,欢迎指正交流。