Come si può sapere se una tabella in DB2 ha una chiave primaria?


9

Stiamo utilizzando uno strumento che richiede tabelle specifiche nel nostro database DB2 per definire una chiave primaria.

Esiste un modo per utilizzare un'istruzione select sul DB per vedere se una determinata tabella ne ha una?

Grazie.

Risposte:


10

Disclaimer: non conosco DB2.

Ho semplicemente cercato su Google con "definizione tabella db2".

Fonte:

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;

Fonte:

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

1
TAB.TYPE = 'V' ti darà punti di vista, che credo tu non voglia. Utilizzare TAB.TYPE = 'T' per le tabelle.
GilShalit,

8

puoi fare un db2look, che ti darà i ddls per la tabella.

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

Benvenuto su dba.se e grazie per questa utile risposta. Spero non ti dispiaccia la mia modifica della formattazione?
Jack dice di provare topanswers.xyz il

@JackDouglas - grazie per quelle modifiche, sembra abbastanza leggibile ora
Govind Kailas

0

Questa è probabilmente l'opzione più semplice, poiché una chiave primaria è supportata da un indice corrispondente:

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

Puoi anche eseguire una query sulla tabella del catalogo delle colonne:

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

2
La chiave primaria non è un indice (sebbene sia supportato da uno).
Mustaccio,

0
  1. SYSCAT.INDEXES.UNIQUERULE (Se UNIQUERULE è P, chiave primaria)
  2. SYSCAT.TABCONST.TYPE (se Tipo è P, Vincolo chiave primaria)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.