47

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

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

4

14 回答 14

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

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

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

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

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

于 2010-08-27T12:37:10.160 回答
29
DB2 LIST TABLES FOR SCHEMA <schema_name>
于 2011-09-06T09:09:17.637 回答
26

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

select *
from QSYS2.SYSTABLES
where TABLE_SCHEMA
like 'SCHEMA_NAME'
and TYPE = 'T';
于 2016-01-05T14:04:44.370 回答
16

你应该试试这个:

select TABNAME from syscat.tables where tabschema = 'yourschemaname'";
于 2012-11-30T23:18:53.007 回答
8

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

db2 LIST TABLES FOR ALL

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

ref:使用 LIST 命令显示 DB2 中的所有表

于 2014-08-14T08:35:35.017 回答
7

对于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 语句,它将返回包含 substring 的所有模式中的所有标准CUR表。在 Db2 命令行中,您还可以使用 CLP 命令,例如db2 list tables for all | grep CUR达到类似效果

页面描述了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

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

此页面包含所有目录视图的列表 目录视图的路线图


对于Db2 for z/OS,使用这里SYSIBM.TABLES描述的。例如

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

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

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'
于 2018-09-13T21:54:54.020 回答
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
于 2016-08-08T05:05:37.627 回答
2
select name from sysibm.systables 
where name like '%ISP%' 
and type = 'T'
于 2012-04-04T09:16:16.187 回答
0

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

于 2013-12-10T06:16:29.903 回答
0

这是我的工作解决方案:

select tabname as table_name
from syscat.tables
where tabschema = 'schema_name' -- put schema name here
      and type = 'T'
order by tabname
于 2021-01-17T14:28:46.963 回答
-1

这应该有效:

select * from syscat.tables
于 2010-09-07T09:56:53.323 回答
-1
SELECT
  name
FROM
  SYSIBM.SYSTABLES
WHERE
    type = 'T'
  AND
    creator = 'MySchema'
  AND
    name LIKE 'book_%';
于 2016-09-27T08:42:22.277 回答
-1

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

于 2017-03-04T14:43:26.670 回答
-1

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

db2 "select NAME from sysibm.systables where CREATOR = '[SCHEMANAME]'and type = 'T'"
于 2018-10-19T04:45:43.293 回答