¿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.

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';

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

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;

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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.