Найти данные таблицы и столбца Informix с помощью SQL-запроса - PullRequest
5 голосов
/ 06 сентября 2011

Я хочу получить информацию о таблице базы данных Informix и информацию о столбцах, такую ​​как

  • имена таблиц
  • имена столбцов таблицы
  • типы данных столбцов
  • длина типа данных (например, если столбец varchar)
  • ограничения на столбцы

Я могу найти имена таблиц и имен столбцов, используя этот запрос дляполучить имена таблиц:

select tabname from systables 

, чтобы найти имя столбца

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  ; 

, но я не могу найти типы данных и ограничения для столбцов.

Может кто-нибудь сказать мне SQL-запрос, чтобы получить полную информацию о таблице, упомянутой выше?

1 Ответ

3 голосов
/ 10 сентября 2011

Вау!Это сложный запрос - лучше всего рассматривать как минимум два, возможно, три запроса;или, может быть, это то, что вы имели в виду в любом случае.

Возможно, вы захотите выбрать tabid и owner в первом запросе, и лучше использовать "informix".systables, а не просто systables (хотя это действительно имеет значение только в базе данных MODE ANSI, но тогда это действительно имеет значение).

Запрос на syscolumns в порядке, хотя предложение t.tabid >= 100, вероятно, является избыточным, если вы не хотите окончательно предотвратитьлюди узнают о столбцах в таблицах системного каталога.Кроме того, может быть полезно знать о столбцах в представлении, поэтому tabtype = 'T' может быть слишком строгим.

Декодирование типов данных является сложным.Для встроенных типов это не так уж сложно;для пользовательских типов это значительно сложнее.coltype и collengthextended_d) сообщают вам о типе.Вы можете найти код C для перевода основных типов в моем пакете SQLCMD , в sqltypes.ec.Вы можете найти простой SQL (который может быть не полным) в $INFORMIXDIR/etc/xpg4_is.sql.

Информация об ограничениях хранится в sysconstraints и связанных таблицах.Вы можете найти код для некоторых ограничений в уже упомянутом источнике SQLCMD (файл sqlinfo.ec).

...