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.
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.
DB2 LIST TABLES FOR SCHEMA <schema_name>
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';
Vous devriez essayer ceci:
select TABNAME from syscat.tables where tabschema = 'yourschemaname'";
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
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'
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'
Vous pouvez également obtenir les noms de table simplement en tapant LIST TABLES dans DB2.