DB2 Query检索给定模式的所有表名

时间:2010-08-27 12:12:43

标签: sql db2 database-schema

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

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

14 个答案:

答案 0 :(得分:67)

select * from sysibm.systables
where owner = 'SCHEMA'
and name like '%CUR%'
and type = 'T';

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

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

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

在任何情况下,您都应该检查特定变体的IBM文档。表名几乎肯定不会更改,所以只需查看SYSIBM.SYSTABLES以获取详细信息。

答案 1 :(得分:26)

DB2 LIST TABLES FOR SCHEMA <schema_name>

答案 2 :(得分:19)

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

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

答案 3 :(得分:10)

你应该试试这个:

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

答案 4 :(得分:8)

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

db2 LIST TABLES FOR ALL

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

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

答案 5 :(得分:3)

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

答案 6 :(得分:3)

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

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

这是一条SQL语句,它将返回包含子字符串CUR的所有架构中的所有 standard 表。在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


对于用于z / OS的Db2 ,请使用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'

对于用于VSE和VM的DB2服务器,请使用DB2 Server for VSE and VM SQL Reference

中所述的SYSTEM.SYSCATALOG
SELECT CREATOR, TNAME FROM SYSTEM.SYSCATALOG WHERE TABLETYPE = 'R'

答案 7 :(得分:2)

select name from sysibm.systables 
where name like '%ISP%' 
and type = 'T'

答案 8 :(得分:0)

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

答案 9 :(得分:0)

这是我的工作解决方案:

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

答案 10 :(得分:-1)

这应该有效:

select * from syscat.tables

答案 11 :(得分:-1)

SELECT
  name
FROM
  SYSIBM.SYSTABLES
WHERE
    type = 'T'
  AND
    creator = 'MySchema'
  AND
    name LIKE 'book_%';

答案 12 :(得分:-1)

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

之后

答案 13 :(得分:-1)

在db2warehouse中,我发现“所有者”不存在,因此我描述了表syscat.systables并尝试使用CREATOR来工作。

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