【问题标题】:List all tables of a given user in Oracle列出Oracle中给定用户的所有表
【发布时间】:2016-07-12 11:57:25
【问题描述】:

我是 Oracle 新手,想查找用户 'john' 创建的所有表。

我通过以下命令通过命令行连接到Oracle数据库:

sqlplus  john/passwd

如何列出给定用户创建的所有表,例如约翰?

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    这将获得“JOHN”用户为所有者的所有表:

    SELECT * FROM USER_TABLES;
    

    SELECT * FROM ALL_TABLES WHERE OWNER = 'JOHN';
    

    ([TL;DR] 'JOHN' 通常需要大写。假设用户 john 是使用 CREATE USER john ... 语句创建的,那么 Oracle 的默认行为是转换所有对象名称 (即表,列,用户等)为大写。当您查询数据字典时,表详细信息将存储在这种情况下(而不是您在原始命令中使用的情况,除非您将其用双引号括起来)。)

    【讨论】:

    • 如果 John 拥有任何对象表(他可能不拥有,因为没有人使用它们),您需要查询 ALL_ALL_TABLES 以获取所有内容。
    【解决方案2】:

    列出您可以使用的表格

    SELECT * FROM ALL_TABLES WHERE OWNER = 'JOHN';
    

    查看您可以使用的架构的大小

    SELECT sum(bytes)
      FROM dba_segments
     WHERE owner = 'JOHN'
    

    由于您是作为架构所有者登录的,因此您也可以使用

    SELECT SUM(bytes)
      FROM user_segments
    

    【讨论】:

      【解决方案3】:

      你也可以用

      select * from 
      USER_TABLES;
      

      无论如何你都可以在这里找到所有数据字典的解释https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables014.htm

      【讨论】:

        【解决方案4】:
        select * from 
        USER_TABLES;
        

        上面的代码将显示当前连接的用户下的所有表的信息。这可能会使您的 SQL 终端混乱。

        要专门查看用户名下的表名,您应该使用以下代码

        select table_name 
        from USER_TABLES;
        

        【讨论】:

          【解决方案5】:

          试试:

          select *
          from all_tables
          where owner = 'jhon';
          

          【讨论】:

          • 很奇怪......这是一个oracle db?尝试:从 user_tables 中选择 *;但这样你只能看到你的桌子
          • SQL> select * from all_tables where owner= 'john';未选择任何行
          • 可能 john 没有定义任何表!尝试从 all_tables 中选择 *;没有任何 where 条件。
          • @m.r226 使用大写:'JOHN'
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-02
          • 2014-03-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-17
          相关资源
          最近更新 更多