【问题标题】:DB2 Query to retrieve all table names for a given schema用于检索给定模式的所有表名的 DB2 查询
【发布时间】:2011-04-04 18:43:39
【问题描述】:

我只是在寻找一个简单的查询来选择给定架构的所有表名。

例如,我们的数据库有超过 100 个表,我需要找到任何包含子字符串“CUR”的表。拥有所有表格后,我可以使用 like 命令。

【问题讨论】:

    标签: sql db2 database-schema


    【解决方案1】:
    select * from sysibm.systables
    where owner = 'SCHEMA'
    and name like '%CUR%'
    and type = 'T';
    

    这将为您提供SCHEMA 架构中包含CUR 的所有表。

    有关SYSIBM.SYSTABLES 表的更多详细信息,请参阅here。如果您看一下左侧的导航窗格,您可以得到各种精彩的 DB2 元数据。

    请注意,此链接适用于大型机 DB2/z。 DB2/LUW(Linux/UNIX/Windows 之一)的列略有不同。为此,我相信您想要CREATOR 列。

    在任何情况下,您都应该检查 IBM 文档以了解您的特定变体。不过,表名几乎可以肯定不会改变,因此请查看SYSIBM.SYSTABLES 了解详细信息。

    【讨论】:

    • SQL0206N "OWNER" is not valid in the context where it is used. SQLSTATE=42703
    • @Marius,您的 DB2 变体中可能有不同的模式 - 这是 DB2/z 特有的,我们喜欢称之为 real DB2 :-) 例如,在 DB2/LUW 中,您将使用 CREATOR。它不会改变基本答案,即使用systables
    • 我的错:我确实在使用 DB2/LUW
    • 只有 IBM 会将产品移植到不同的操作系统并使其与原始操作系统不兼容...
    • DB2 的 4 个平台(LUW、z/OS、i 和 VSE/VM)不是彼此的移植,它们具有独立的代码库,并且是独立开发的(大部分)。 Db2 for i 甚至不是一个单独的产品,而是 iSeries 操作系统的一个组成部分。请注意,Liunx(包括 zLinux)、Unix 和 Windows 版本是相同的代码库,并且是相同的产品。
    【解决方案2】:

    这应该可行:

    select * from syscat.tables
    

    【讨论】:

      【解决方案3】:
      DB2 LIST TABLES FOR SCHEMA <schema_name>
      

      【讨论】:

      • 此选项的好处是不区分大小写。
      【解决方案4】:
      select name from sysibm.systables 
      where name like '%ISP%' 
      and type = 'T'
      

      【讨论】:

        【解决方案5】:

        你应该试试这个:

        select TABNAME from syscat.tables where tabschema = 'yourschemaname'";
        

        【讨论】:

          【解决方案6】:

          您也可以通过在 DB2 中键入 LIST TABLES 来获取表名

          【讨论】:

          • 这不是真的。 LIST TABLES 为我生成 0 个表。而 LIST TABLES SCHEMAXresults 在该模式的 796 个表中。因此,LIST TABLES 不一定显示所有表格。
          【解决方案7】:

          使用 DB2 命令(无 SQL)有可能执行

          db2 LIST TABLES FOR ALL
          

          这显示了数据库中所有模式中的所有表。

          参考:show all tables in DB2 using the LIST command

          【讨论】:

          • 如果您不知道要查找的架构,或者想要将数据库中所有表的列表转储到文件中,这将非常方便。 db2 "list tables for all" &gt; tables.txt
          • 这就是我想要的!谢谢!
          【解决方案8】:

          在我的 iSeries 上,我必须从 iNavigator 运行此命令:

          select *
          from QSYS2.SYSTABLES
          where TABLE_SCHEMA
          like 'SCHEMA_NAME'
          and TYPE = 'T';
          

          【讨论】:

          • 需要 QSYS2.SYSTABLES 才能在 IBM iSeries 上列出 JD Edwards 9.2 表。
          【解决方案9】:
          db2 connect to MY_INSTACE_DB with myuser -- connect to db2    
          db2 "select TABNAME from syscat.tables where tabschema = 'mySchema' with ur"
          db2 terminate -- end connection
          

          【讨论】:

            【解决方案10】:
            SELECT
              name
            FROM
              SYSIBM.SYSTABLES
            WHERE
                type = 'T'
              AND
                creator = 'MySchema'
              AND
                name LIKE 'book_%';
            

            【讨论】:

              【解决方案11】:

              数据没有太大区别,主要区别在于列顺序 在列表表架构列将在表/视图列之后 在列表中显示详细信息架构列将在列类型之后

              【讨论】:

                【解决方案12】:

                对于 Db2 for Linux、Unix 和 Windows(即 Db2 LUW)或 Db2 Warehouse,请使用 SYSCAT.TABLES 目录视图。例如。

                SELECT TABSCHEMA, TABNAME FROM SYSCAT.TABLES WHERE TABSCHEMA LIKE '%CUR%' AND TYPE = 'T'
                

                这是一个 SQL 语句,它将返回包含子字符串 CUR 的所有模式中的所有 标准 表。在 Db2 命令行中,您还可以使用 CLP 命令,例如db2 list tables for all | grep CUR 效果类似

                page 描述了SYSCAT.TABLES 中的列,包括TYPE 列的不同值。

                A = Alias
                G = Created temporary table
                H = Hierarchy table
                L = Detached table
                N = Nickname
                S = Materialized query table
                T = Table (untyped)
                U = Typed table
                V = View (untyped)
                W = Typed view
                

                其他常用的目录视图包括

                SYSCAT.COLUMNS      Lists the columns in each table, view and nickname
                SYSCAT.VIEWS        Full SQL text for view and materialized query tables
                SYSCAT.KEYCOLUSE    Column that are in PK, FK or Uniuqe constraints
                

                在 Db2 LUW 中,使用 SYSIBM 目录表(SYSCAT 目录视图从中选择数据)被认为是不好的做法。就列名而言,它们不太一致,不太容易使用,没有文档记录,并且更有可能在版本之间发生变化。

                此页面包含所有目录视图的列表Road map to the catalog views


                对于 Db2 for z/OS,使用 SYSIBM.TABLES,描述为 here。例如

                SELECT CREATOR, NAME FROM SYSIBM.SYSTABLES WHERE OWNER LIKE '%CUR%' AND TYPE = 'T'
                

                对于 Db2 for i(即 iSeries aka AS/400)使用 QSYS2.SYSTABLES 描述为 here

                SELECT TABLE_OWNER, TABLE_NAME FROM QSYS2.SYSTABLES WHERE TABLE_SCHEMA LIKE '%CUR%' AND TABLE_TYPE = 'T'
                

                对于 DB2 Server for VSE 和 VM,请使用 SYSTEM.SYSCATALOG,此处描述为 DB2 Server for VSE and VM SQL Reference

                SELECT CREATOR, TNAME FROM SYSTEM.SYSCATALOG WHERE TABLETYPE = 'R'
                

                【讨论】:

                • 对目录查询使用未提交的读取(例如,在查询末尾添加WITH UR)通常是避免等待其他应用程序未提交目录更改的好主意。
                • 这个答案对我寻找自定义数据库项目的任务非常有帮助。感谢您详细介绍!
                【解决方案13】:

                在 db2warehouse 中我发现“所有者”不存在,所以我描述了表 syscat.systables 并尝试使用 CREATOR 来代替它。

                db2 "select NAME from sysibm.systables where CREATOR = '[SCHEMANAME]'and type = 'T'"
                

                【讨论】:

                • 在 Db2 LUW 和 Db2 Warehouse 中使用 SYSCAT.TABLES。它有一个 TABSCHEMA 列
                • 我已更新我的答案以包含 3 个不同 Db2 平台 HTH 的架构/所有者列
                【解决方案14】:

                这是我的工作解决方案:

                select tabname as table_name
                from syscat.tables
                where tabschema = 'schema_name' -- put schema name here
                      and type = 'T'
                order by tabname
                

                【讨论】:

                  猜你喜欢
                  • 2013-10-15
                  • 2021-04-18
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-01-26
                  • 2011-12-07
                  • 2014-06-28
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多