Вау!Это сложный запрос - лучше всего рассматривать как минимум два, возможно, три запроса;или, может быть, это то, что вы имели в виду в любом случае.
Возможно, вы захотите выбрать tabid
и owner
в первом запросе, и лучше использовать "informix".systables
, а не просто systables
(хотя это действительно имеет значение только в базе данных MODE ANSI, но тогда это действительно имеет значение).
Запрос на syscolumns
в порядке, хотя предложение t.tabid >= 100
, вероятно, является избыточным, если вы не хотите окончательно предотвратитьлюди узнают о столбцах в таблицах системного каталога.Кроме того, может быть полезно знать о столбцах в представлении, поэтому tabtype = 'T'
может быть слишком строгим.
Декодирование типов данных является сложным.Для встроенных типов это не так уж сложно;для пользовательских типов это значительно сложнее.coltype
и collength
(и extended_d
) сообщают вам о типе.Вы можете найти код C для перевода основных типов в моем пакете SQLCMD , в sqltypes.ec
.Вы можете найти простой SQL (который может быть не полным) в $INFORMIXDIR/etc/xpg4_is.sql
.
Информация об ограничениях хранится в sysconstraints
и связанных таблицах.Вы можете найти код для некоторых ограничений в уже упомянутом источнике SQLCMD (файл sqlinfo.ec
).