2012-03-09 106 views
2

all_tables怎么不显示实际包含所有表的列表?可以做select * from blah;desc blah。 但是这样做select * from all_tables where lower(table_name) = 'blah';返回0行。Oracle - all_tables不完整?

blah不是同义词或视图,而是表格。

是否需要运行特定的统计信息命令,以便我的用户可以查询的所有表都出现在all_tables

+0

您的用户是否拥有DBA权限? – 2012-03-09 11:59:02

+9

我不相信你。如果你有一个名为BLAH的表,并且你有权限,'select * from all_tables where lower(table_name)='blah';'将返回一行。所以你的代码中的某处你犯了一个错误。请检查它。 – APC 2012-03-09 12:03:46

+4

'等等'可能是一个视图或同义词。 – Glenn 2012-03-09 12:13:14

回答

1

您可以尝试以下语句以查看发生了什么。

select owner, object_name, object_type 
    from all_objects 
    where object_name = 'BLAH' 
union 
select o.owner, o.object_name, o.object_type 
    from all_synonyms s, all_objects o 
    where synonym_name like 'BLAH' 
     and o.owner = s.table_owner 
     and o.object_name = s.table_name; 

我在我的系统上运行这个输出(名称改为保护贫困)。

OWNER OBJECT_NAME OBJECT_TYPE 
------- -------------- ----------- 
PROD T_BLAH   TABLE 
PUBLIC BLAH   SYNONYM 

HTH。