Comment savoir si une table dans DB2 a une clé primaire?


9

Nous utilisons un outil qui nécessite des tables spécifiques dans notre base de données DB2 pour définir une clé primaire.

Existe-t-il un moyen d'utiliser une instruction select sur la base de données pour voir si une table donnée en a une?

Merci.

Réponses:


10

Avertissement: je ne connais pas DB2.

Je les ai simplement googlé avec "définition de table db2".

La source:

SELECT * 
FROM SYSIBM.SYSTABLES TAB,SYSIBM.SYSCOLUMNS COL 
WHERE TAB.CREATOR = COL.TBCREATOR 
AND TAB.CREATOR = 'xxxx' 
AND TAB.NAME = 'xxxxxxxxxxxxx' 
AND TAB.NAME = COL.TBNAME 
AND TAB.TYPE = 'V' ( OR 'T' ) 
ORDER BY 1,2;

La source:

SELECT * FROM syscat.tabconst WHERE type = 'P';

1
TAB.TYPE = 'V' vous donnera des vues que vous ne souhaitez pas. Utilisez TAB.TYPE = 'T' pour les tableaux.
GilShalit

8

vous pouvez faire un db2look, qui vous donnera les ddls pour la table.

db2look -d db_name -e -x -z schema_name -t table_name

Bienvenue sur dba.se et merci pour cette réponse utile - J'espère que cela ne vous dérange pas ma modification de formatage?
Jack dit d'essayer topanswers.xyz

@JackDouglas - merci pour ces modifications, semble assez lisible maintenant
Govind Kailas

0

C'est probablement l'option la plus simple, car une clé primaire est prise en charge par un index correspondant:

select COLNAMES from SYSIBM.SYSINDEXES where tbname = 'TABLE' and uniquerule = 'P';

Vous pouvez également interroger la table de catalogue de colonnes:

select NAME from SYSIBM.SYSCOLUMNS where tbname = 'TABLE' and keyseq > 0 order by keyseq;

2
La clé primaire n'est pas un index (bien qu'elle soit prise en charge par un).
mustaccio

0
  1. SYSCAT.INDEXES.UNIQUERULE (Si UNIQUERULE est P, la clé primaire)
  2. SYSCAT.TABCONST.TYPE (si Type est P alors Contrainte de clé primaire)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.