特定のスキーマのすべてのテーブル名を選択するための簡単なクエリを探しています。
たとえば、DBには100を超えるテーブルがあり、サブ文字列「CUR」を含むテーブルを見つける必要があります。すべてのテーブルができたら、likeコマンドを使用できます。
特定のスキーマのすべてのテーブル名を選択するための簡単なクエリを探しています。
たとえば、DBには100を超えるテーブルがあり、サブ文字列「CUR」を含むテーブルを見つける必要があります。すべてのテーブルができたら、likeコマンドを使用できます。
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
ください。
DB2 LIST TABLES FOR SCHEMA <schema_name>
私のiSeriesでは、iNavigatorから次のコマンドを実行する必要があります。
select *
from QSYS2.SYSTABLES
where TABLE_SCHEMA
like 'SCHEMA_NAME'
and TYPE = 'T';
これを試してみてください:
select TABNAME from syscat.tables where tabschema = 'yourschemaname'";
DB2コマンド(SQLなし)を使用すると、実行される可能性があります
db2 LIST TABLES FOR ALL
これにより、データベース内のすべてのスキーマのすべてのテーブルが表示されます。
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'
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 name like '%ISP%'
and type = 'T'
DB2でLISTTABLESと入力するだけで、テーブル名を取得することもできます。
これが私の実用的な解決策です。
select tabname as table_name
from syscat.tables
where tabschema = 'schema_name' -- put schema name here
and type = 'T'
order by tabname
これは機能するはずです:
select * from syscat.tables
SELECT
name
FROM
SYSIBM.SYSTABLES
WHERE
type = 'T'
AND
creator = 'MySchema'
AND
name LIKE 'book_%';
データに大きな違いはありません。主な違いは列の順序です。リストテーブルではスキーマ列はテーブル/ビュー列の後になりますリストテーブルでは詳細を表示しますスキーマ列は列タイプの後になります
db2warehouseで、「所有者」が存在しないことがわかったので、テーブルsyscat.systablesについて説明し、代わりにCREATORを使用してみてください。
db2 "select NAME from sysibm.systables where CREATOR = '[SCHEMANAME]'and type = 'T'"