sql - describe - informix find table
Informix SQL-Listar todos los campos y tablas (3)
Informix iSQL tiene un comando " info tables;
" que muestra todas las tablas.
La sintaxis para ver los campos y sus respectivos tipos de datos es " info columns for table;
" info columns for table;
¿Hay un comando similar que muestre table.field para todas las tablas y todos los campos?
Como menciona la respuesta de Jonathan Leffer, el manejo completo de los tipos de columna y los detalles de la columna se complica, como se puede ver en la documentación de SYSCOLUMNS . Pero si está viendo una base de datos que no usa tipos más complicados, esta adición a su script mostrará el tipo básico y si se permiten los NULL:
SELECT TRIM(t.tabname) || ''.'' || TRIM(c.colname) AS table_dot_column,
CASE
WHEN MOD(coltype,256)=0 THEN ''CHAR''
WHEN MOD(coltype,256)=1 THEN ''SMALLINT''
WHEN MOD(coltype,256)=2 THEN ''INTEGER''
WHEN MOD(coltype,256)=3 THEN ''FLOAT''
WHEN MOD(coltype,256)=4 THEN ''SMALLFLOAT''
WHEN MOD(coltype,256)=5 THEN ''DECIMAL''
WHEN MOD(coltype,256)=6 THEN ''SERIAL''
WHEN MOD(coltype,256)=7 THEN ''DATE''
WHEN MOD(coltype,256)=8 THEN ''MONEY''
WHEN MOD(coltype,256)=9 THEN ''NULL''
WHEN MOD(coltype,256)=10 THEN ''DATETIME''
WHEN MOD(coltype,256)=11 THEN ''BYTE''
WHEN MOD(coltype,256)=12 THEN ''TEXT''
WHEN MOD(coltype,256)=13 THEN ''VARCHAR''
WHEN MOD(coltype,256)=14 THEN ''INTERVAL''
WHEN MOD(coltype,256)=15 THEN ''NCHAR''
WHEN MOD(coltype,256)=16 THEN ''NVARCHAR''
WHEN MOD(coltype,256)=17 THEN ''INT8''
WHEN MOD(coltype,256)=18 THEN ''SERIAL8''
WHEN MOD(coltype,256)=19 THEN ''SET''
WHEN MOD(coltype,256)=20 THEN ''MULTISET''
WHEN MOD(coltype,256)=21 THEN ''LIST''
WHEN MOD(coltype,256)=22 THEN ''ROW (unnamed)''
WHEN MOD(coltype,256)=23 THEN ''COLLECTION''
WHEN MOD(coltype,256)=40 THEN ''LVARCHAR fixed-length opaque types''
WHEN MOD(coltype,256)=41 THEN ''BLOB, BOOLEAN, CLOB variable-length opaque types''
WHEN MOD(coltype,256)=43 THEN ''LVARCHAR (client-side only)''
WHEN MOD(coltype,256)=45 THEN ''BOOLEAN''
WHEN MOD(coltype,256)=52 THEN ''BIGINT''
WHEN MOD(coltype,256)=53 THEN ''BIGSERIAL''
WHEN MOD(coltype,256)=2061 THEN ''IDSSECURITYLABEL''
WHEN MOD(coltype,256)=4118 THEN ''ROW (named)''
ELSE TO_CHAR(coltype)
END AS Type,
BITAND(coltype,256)=256 AS NotNull
FROM "informix".systables AS t
JOIN "informix".syscolumns AS c ON t.tabid = c.tabid
WHERE t.tabtype = ''T''
AND t.tabid >= 100
ORDER BY t.tabname, c.colno;
Usando la notación JOIN preferida:
SELECT TRIM(t.tabname) || ''.'' || TRIM(c.colname) AS table_dot_column
FROM "informix".systables AS t
JOIN "informix".syscolumns AS c ON t.tabid = c.tabid
WHERE t.tabtype = ''T''
AND t.tabid >= 100
ORDER BY t.tabname, c.colno;
o la antigua notación de cláusula de unión en:
SELECT TRIM(t.tabname) || ''.'' || TRIM(c.colname) AS table_dot_column
FROM "informix".systables AS t, "informix".syscolumns AS c
WHERE t.tabid = c.tabid
AND t.tabtype = ''T''
AND t.tabid >= 100
ORDER BY t.tabname, c.colno;
Suponiendo que está utilizando una versión suficientemente reciente de IDS, puede ordenar por columnas no citadas en la lista de selección. Si recibe quejas, agregue las columnas de pedido a la lista de selección.
El criterio de unión es obvio; tabtype = ''T'' enumera solo tablas, no vistas, sinónimos y otros elementos similares listados en systables; tabid> = 100 solo lista las tablas creadas explícitamente en la base de datos, no el catálogo del sistema.
Esto no incluye la información de tipo; si lo desea, debe hacer un poco más de trabajo. Encontrará un archivo $INFORMIXDIR/etc/xpg4_is.sql
que contiene una aproximación $INFORMIXDIR/etc/xpg4_is.sql
a una versión anterior del Esquema de información XPG4 (X / Estándar abierto) (de ahí el nombre del archivo). Allí, hay funciones, etc., para decodificar información de tipo de syscolumns.coltype
y syscolumns.collength
en cadenas reconocibles. Sin embargo, sospecho que no maneja tipos DISTINCT, ni otros tipos definidos por el usuario. Estaré encantado de que se demuestre lo contrario, pero ... Si agrega las partes relevantes de ese archivo a su base de datos, también podrá obtener la información de tipo.
También tenga en cuenta que todos los comandos INFO en ISQL y DB-Access se simulan en el front-end, no se ejecutan en el servidor IDS. Básicamente, los programas toman la solicitud y la convierten en una declaración SQL más compleja. Vea el código en el archivo sqlinfo.ec
que forma parte de SQLCMD (disponible en el Archivo de Software IIUG ) para ver cómo mi programa SQLCMD maneja las declaraciones INFO. (Nota: la salida de INFO de SQLCMD tiene un formato diferente de la salida de INFO de ISQL y DB-Access).
Utilice la tabla syscolumns. Dicha información se describe en IBM Informix Guide to SQL.
He hecho utilidades Python simples que muestran información de esquema para Informix , Oracle y PostgreSQL . Son útiles si tienes que comparar bases de datos.