【问题标题】:Oracle - all_tables is not complete?Oracle - all_tables 不完整?
【发布时间】:2012-03-09 11:54:17
【问题描述】:

all_tables怎么不显示实际包含所有表的列表?

我可以做到select * from blah;desc blah。 但是select * from all_tables where lower(table_name) = 'blah'; 会返回 0 行。

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

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

【问题讨论】:

  • 我不相信你。如果您有一个名为 BLAH 的表并且您对其拥有权限,select * from all_tables where lower(table_name) = 'blah'; 将返回一行。所以在你的代码的某个地方你犯了一个错误。请检查它。
  • 'blah' 可以是视图或同义词。
  • 尝试 select * from all_objects where lower(object_name) = 'blah' 并检查 OBJECT_TYPE。
  • 尝试select * from dba_tables时是否找到对象
  • 还有一个系统表all_objects 尝试查询select object_type from all_objects where lower(object_name) = 'blah' .. 首先它会给出系统中“blah”对象的类型..

标签: sql database oracle oracle11g


【解决方案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。

【讨论】:

    【解决方案2】:

    我确信对象名称存在混淆。 请用对象名称签入DBA_OBJECTS

    USER_TABLES- 拥有的表

    ALL_TABLES - 拥有的表,其他有权访问的用户拥有的表 你

    DBA_TABLES - 数据库中的所有表

    【讨论】:

      【解决方案3】:

      尝试断开并重新连接会话,看看结果是否改变。

      【讨论】:

        猜你喜欢
        • 2013-01-12
        • 1970-01-01
        • 1970-01-01
        • 2012-06-11
        • 1970-01-01
        • 2012-07-11
        • 2020-03-05
        • 2012-01-31
        • 1970-01-01
        相关资源
        最近更新 更多