【发布时间】:2011-04-04 18:43:39
【问题描述】:
我只是在寻找一个简单的查询来选择给定架构的所有表名。
例如,我们的数据库有超过 100 个表,我需要找到任何包含子字符串“CUR”的表。拥有所有表格后,我可以使用 like 命令。
【问题讨论】:
标签: sql db2 database-schema
我只是在寻找一个简单的查询来选择给定架构的所有表名。
例如,我们的数据库有超过 100 个表,我需要找到任何包含子字符串“CUR”的表。拥有所有表格后,我可以使用 like 命令。
【问题讨论】:
标签: sql db2 database-schema
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
systables。
这应该可行:
select * from syscat.tables
【讨论】:
DB2 LIST TABLES FOR SCHEMA <schema_name>
【讨论】:
select name from sysibm.systables
where name like '%ISP%'
and type = 'T'
【讨论】:
你应该试试这个:
select TABNAME from syscat.tables where tabschema = 'yourschemaname'";
【讨论】:
您也可以通过在 DB2 中键入 LIST TABLES 来获取表名
【讨论】:
LIST TABLES 为我生成 0 个表。而 LIST TABLES SCHEMAXresults 在该模式的 796 个表中。因此,LIST TABLES 不一定显示所有表格。
使用 DB2 命令(无 SQL)有可能执行
db2 LIST TABLES FOR ALL
这显示了数据库中所有模式中的所有表。
【讨论】:
db2 "list tables for all" > tables.txt
在我的 iSeries 上,我必须从 iNavigator 运行此命令:
select *
from QSYS2.SYSTABLES
where TABLE_SCHEMA
like 'SCHEMA_NAME'
and TYPE = 'T';
【讨论】:
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
【讨论】:
SELECT
name
FROM
SYSIBM.SYSTABLES
WHERE
type = 'T'
AND
creator = 'MySchema'
AND
name LIKE 'book_%';
【讨论】:
数据没有太大区别,主要区别在于列顺序 在列表表架构列将在表/视图列之后 在列表中显示详细信息架构列将在列类型之后
【讨论】:
对于 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)通常是避免等待其他应用程序未提交目录更改的好主意。
在 db2warehouse 中我发现“所有者”不存在,所以我描述了表 syscat.systables 并尝试使用 CREATOR 来代替它。
db2 "select NAME from sysibm.systables where CREATOR = '[SCHEMANAME]'and type = 'T'"
【讨论】:
这是我的工作解决方案:
select tabname as table_name
from syscat.tables
where tabschema = 'schema_name' -- put schema name here
and type = 'T'
order by tabname
【讨论】: