47

特定のスキーマのすべてのテーブル名を選択するための簡単なクエリを探しています。

たとえば、DBには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

Linux、Unix、およびWindows用のDb2(つまり、Db2 LUW)の場合、またはDb2 WarehouseSYSCAT.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

このページでは、列のさまざまな値を含む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カタログビューがデータを選択するテーブル)を使用することは悪い習慣と見なされています。これらは、列名に関する限り一貫性が低く、使いやすくなく、文書化されておらず、バージョン間で変更される可能性が高くなります。

このページには、すべてのカタログビューのリストがあります。カタログビューへのロードマップ


Db2 for z / OSの場合は、ここSYSIBM.TABLESで説明されているものを使用してください。例えば

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

Db2 for i(つまり、iSeries別名AS / 400)の場合、ここQSYS2.SYSTABLESで説明されています。

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

ここで説明されているVSEおよびVM用のDB2サーバーの場合VSEおよびVM用のDB2サーバーSQLリファレンスSYSTEM.SYSCATALOG

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でLISTTABLESと入力するだけで、テーブル名を取得することもできます。

于 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 に答える