Como você pode saber se uma tabela no DB2 possui uma Chave Primária?

9

Estamos usando uma ferramenta que requer tabelas específicas em nosso banco de dados DB2 para ter uma Chave Primária definida.

Existe uma maneira de usar uma instrução select no banco de dados para ver se uma determinada tabela possui uma?

Obrigado.

Ben
fonte

Respostas:

10

Isenção de responsabilidade: Eu não conheço o DB2.

Eu simplesmente os pesquisei com "definição de tabela 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';
RolandoMySQLDBA
fonte
11
TAB.TYPE = 'V' fornecerá visualizações, as quais acredito que você não deseja. Use TAB.TYPE = 'T' para tabelas.
GilShalit
8

você pode fazer um db2look, que fornecerá os ddls para a tabela.

db2look -d db_name -e -x -z schema_name -t table_name
Govind Kailas
fonte
Bem-vindo ao dba.se e obrigado por esta resposta útil - espero que você não se importe com a minha edição de formatação?
Jack diz que tente topanswers.xyz 25/10
@JackDouglas - graças para essas edições, parece muito legível agora
Govind Kailas
0

Essa é provavelmente a opção mais fácil, pois uma chave primária é suportada por um índice correspondente:

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

Você também pode consultar a tabela de catálogo de colunas:

select NAME from SYSIBM.SYSCOLUMNS where tbname = 'TABLE' and keyseq > 0 order by keyseq;
Scott McIntyre
fonte
2
A chave primária não é um índice (embora seja suportada por uma).
28914 mustaccio
0
  1. SYSCAT.INDEXES.UNIQUERULE (Se UNIQUERULE for P, a chave primária)
  2. SYSCAT.TABCONST.TYPE (se Type for P, em seguida, restrição de chave primária)
Daniel Adeniji
fonte