2011-09-06 214 views
5

quiero conseguir información de tabla de base de datos Informix y la información de la columna comoEncuentra Informix de tablas y columnas datos utilizando la consulta SQL

  • nombres de tabla
  • nombre
  • columna de la tabla
  • tipos de datos de las columnas
  • tipo de datos de longitud (por ejemplo: si la columna es varchar)
  • limitaciones de las columnas

soy capaz de encontrar los nombres de tabla y nombres de columna utilizando esta consulta para obtener los nombres de las tablas

select tabname from systables 

para encontrar el nombre de la columna

SELECT TRIM(c.colname) AS table_dot_column 
FROM "informix".systables AS t, "informix".syscolumns AS c 
WHERE t.tabname = 'agent_status' 
AND t.tabtype = 'T' 
and t.tabid = c.tabid 
AND t.tabid >= 100 ; 

pero no soy capaz de encontrar los tipos de datos y restricciones de las columnas.

¿Alguien puede decirme la consulta SQL para obtener los detalles totales de la tabla mencionada anteriormente?

Respuesta

3

¡Guau! Esa es una consulta compleja: se trata mejor como al menos dos, probablemente tres consultas; o tal vez eso es lo que tenías en mente de todos modos.

Es posible que desee seleccionar y tabidowner en la primera consulta, y es buena forma de usar "informix".systables en lugar de sólo systables (aunque que sólo realmente importa en una base de datos ANSI MODO, pero entonces realmente importa).

La consulta en syscolumns está bien, aunque la cláusula t.tabid >= 100 es probablemente redundante, a menos que definitivamente desee evitar que las personas conozcan las columnas en las tablas del catálogo del sistema. Además, puede ser útil conocer las columnas en una vista, por lo que tabtype = 'T' podría ser demasiado estricto.

La decodificación de los tipos de datos es complicada. Para los tipos incorporados, no es demasiado difícil; para los tipos definidos por el usuario, es un trabajo considerablemente más difícil. El coltype y collength (y extended_d) le informa sobre el tipo. Puede encontrar el código C para traducir los tipos básicos en mi paquete SQLCMD, en sqltypes.ec. Puede encontrar algunos SQL simples (que pueden no estar completos) en $INFORMIXDIR/etc/xpg4_is.sql.

La información de restricción se almacena en sysconstraints y las tablas relacionadas. Puede encontrar el código para algunas restricciones en la fuente SQLCMD ya mencionado (archivo sqlinfo.ec).

Cuestiones relacionadas