在 Informix 中,确定包含字符数据的列虽然很麻烦,但也是可行的。幸运的是,您不太可能使用诸如 DISTINCT TYPE 之类的深奥功能,这会使搜索变得更加困难。 (Alphadogg 的卸载建议 - 正如我在对他的回答的评论中所指出的那样使用 dbexport - 是有道理的,特别是如果文本可能出现在 CLOB 或 TEXT 字段中。)您需要知道类型 CHAR、NCHAR、VARCHAR、NVARCHAR 和LVARCHAR 的类型编号为 0、13、15、16 和 43。此外,如果列不是 NULL,则将 256 添加到编号中。因此,通过此查询可以找到数据库中的字符数据列:
SELECT t.owner, t.tabname, c.colname, t.tabid, c.colno
FROM "informix".systables t, "informix".syscolumns c
WHERE t.tabid = c.tabid
AND c.coltype IN (0, 13, 15, 16, 43, 256, 269, 271, 272, 299)
AND t.tabtype = 'T' -- exclude views, synonyms, etc.
AND t.tabid >= 100 -- exclude the system catalog
ORDER BY t.owner, t.tabname, c.colno;
这会生成要搜索的地点列表。您可能会喜欢并让 SELECT 生成一个适合作为查询重新提交的字符串 - 留给读者作为练习。