我有一个由大量表组成的 informix 数据库。
我知道某个表中的某处有一个字符串“example”,但不知道它是哪个表或哪一列。 (我知道这是非常罕见的情况)
由于表数量较多,无法手动查找。我如何在这个大型数据库中找到这个值?有什么查询可以找到吗?
提前致谢!
最佳答案
通常,您有两种方法。
一种方法是将每个表转储到单独的文本文件中并 grep 这些文件。这可以在小型数据库上手动完成,或者在较大数据库的情况下通过脚本完成。查看 UNLOAD 和 dbaccess。 BASH 脚本中的示例:(您需要在脚本中静态或通过查询生成表列表。)
unload_tables () {
for table in ${TABLE_LIST} do
dbaccess database_name << EOF
unload to "${OUT_PATH}/${table}/.out"
select * from $table;
EOF
done
}
或者,这有点复杂。您可以使用 systables
和 syscolumns
以类似的自动化方式为数据库中的每个表和列创建特定的 SELECT(按“example”过滤每个列),然后运行每个sql。
例如,此查询显示所有表中的所有列:
SELECT tabname, colno, colname, coltype, collength
FROM systables a, syscolumns b
WHERE a.tabid = b.tabid
很容易对此进行调整,以便 SELECT 返回格式正确的 SQL 字符串,该字符串允许您查询数据库以查找与“example”的匹配项。抱歉,我还没有准备好完整的解决方案,但是如果您在 google 上搜索“informix systables syscolumns”,您会看到很多使用此信息的方法。
关于database - 如何在整个数据库中查找某个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/536721/