¿Cómo puede saber si una tabla en DB2 tiene una clave primaria?

9

Estamos utilizando una herramienta que requiere tablas específicas en nuestra base de datos DB2 para tener una Clave primaria definida.

¿Hay alguna manera de usar una instrucción select en la base de datos para ver si una tabla dada tiene una?

Gracias.

Ben
fuente

Respuestas:

10

Descargo de responsabilidad: no conozco DB2.

Simplemente busqué en Google estos con "definición de tabla db2".

Fuente:

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;

Fuente:

SELECT * FROM syscat.tabconst WHERE type = 'P';
RolandoMySQLDBA
fuente
1
TAB.TYPE = 'V' te dará vistas, que creo que no quieres. Use TAB.TYPE = 'T' para las tablas.
GilShalit
8

puedes hacer un db2look, que te dará los ddls para la mesa.

db2look -d db_name -e -x -z schema_name -t table_name
Govind Kailas
fuente
Bienvenido a dba.se y gracias por esta útil respuesta. Espero que no le importe mi edición de formato.
Jack dice que intente topanswers.xyz
@JackDouglas - gracias por esas ediciones, parece bastante legible ahora
Govind Kailas
0

Esta es probablemente la opción más fácil, ya que una clave principal es compatible con un índice coincidente:

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

También puede consultar la tabla de catálogo de columnas:

select NAME from SYSIBM.SYSCOLUMNS where tbname = 'TABLE' and keyseq > 0 order by keyseq;
Scott McIntyre
fuente
2
La clave primaria no es un índice (aunque es compatible con uno).
mustaccio
0
  1. SYSCAT.INDEXES.UNIQUERULE (Si UNIQUERULE es P, entonces la clave principal)
  2. SYSCAT.TABCONST.TYPE (si Tipo es P, entonces Restricción de clave principal)
Daniel Adeniji
fuente