web-dev-qa-db-fra.com

DB2 Query pour récupérer tous les noms de table pour un schéma donné

Je cherche simplement une requête simple pour sélectionner tous les noms de table pour un schéma donné.

Par exemple, notre base de données contient plus de 100 tables et je dois trouver toute table contenant la sous-chaîne "CUR". Je peux utiliser la commande like une fois que j'ai toutes les tables.

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

Cela vous donnera toutes les tables contenant CUR dans le schéma SCHEMA.

Voir ici pour plus de détails sur le SYSIBM.SYSTABLES table. Si vous consultez le volet de navigation de gauche, vous pouvez obtenir toutes sortes d'excellentes métatdata DB2.

Notez que ce lien concerne l’ordinateur central DB2/z. DB2/LUW (Linux/UNIX/Windows) a des colonnes légèrement différentes. Pour cela, je pense que vous voulez la colonne CREATOR.

Dans tous les cas, vous devez examiner les documents IBM pour votre variante spécifique. Le nom de la table ne changera probablement pas , alors il suffit de regarder SYSIBM.SYSTABLES pour les détails.

69
paxdiablo
DB2 LIST TABLES FOR SCHEMA <schema_name>
26
deepthi

Sur mon iSeries, je dois exécuter cette commande à partir d'iNavigator:

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

Vous devriez essayer ceci:

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

En utilisant les commandes DB2 (pas de SQL), il est possible d’exécuter

db2 LIST TABLES FOR ALL

Cela montre toutes les tables de tous les schémas de la base de données.

ref: affiche toutes les tables dans DB2 à l'aide de la commande LIST

7
schneiti

Pour Db2 pour Linux, Unix et Windows (c'est-à-dire Db2 LUW) ou pour Db2 Warehouse Utilisez le SYSCAT.TABLES vue catalogue. Par exemple.

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

Ce qui est une instruction SQL qui renverra toutes les tables standard de tous les schémas contenant la sous-chaîne CUR. À partir d’une ligne de commande Db2, vous pouvez également utiliser une commande CLP, par exemple. db2 list tables for all | grep CUR à effet similaire

Cette page décrit les colonnes de SYSCAT.TABLES , y compris les différentes valeurs de la colonne 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

Les autres vues de catalogue couramment utilisées comprennent

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

Dans Db2 LUW, il est considéré comme une mauvaise pratique d’utiliser les tables de catalogue SYSIBM (dans lesquelles les vues de catalogue SYSCAT sélectionnent leurs données). Ils sont moins cohérents en ce qui concerne les noms de colonne, ne sont pas aussi faciles à utiliser, ne sont pas documentés et sont plus susceptibles de changer d'une version à l'autre.

Cette page contient une liste de toutes les vues de catalogue Feuille de route des vues de catalogue


Pour Db2 pour z/OS , utilisez SYSIBM.TABLES qui est décrit ici . Par exemple.

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

Pour Db2 pour i (c'est-à-dire iSeries aka AS/400), utilisez QSYS2.SYSTABLES qui est décrit ici

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

Pour DB2 Server pour VSE et VM , utilisez SYSTEM.SYSCATALOG décrit ici serveur DB2 pour VSE et VM Référence SQL

SELECT CREATOR, TNAME FROM SYSTEM.SYSCATALOG WHERE TABLETYPE = 'R'
4
Paul Vernon
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
3
Cristian
select name from sysibm.systables 
where name like '%ISP%' 
and type = 'T'
2
federico molteni

Vous pouvez également obtenir les noms de table simplement en tapant LIST TABLES dans DB2.

0
BharathRapolu