【问题标题】:How to find DB2 tables that do not exist如何查找不存在的 DB2 表
【发布时间】:2012-10-15 02:17:20
【问题描述】:

我有一个表列表,我想检查目标数据库中当前不存在哪些表,但我无法找出只返回列表中不存在的表的查询?我正在运行 DB2 9.7。

【问题讨论】:

    标签: sql db2 catalog


    【解决方案1】:

    如果您要检查的表的列表是您可以查询的形式,它将是这样的。下面的查询将返回所有不在选择表查询中的表(您必须提供):

    select * from sysibm.systables
    where owner = 'SCHEMA'
    and type = 'T'
    and name not in ( /* select query to return your list of tables */ );
    

    更新帖子评论:

    如果表格列在平面文件(.txt、.csv)中并且数量是可管理的。您应该能够像这样以逗号分隔的形式列出它们(至少您可以使用我更熟悉的其他 sql 语言)。

    select * from sysibm.systables
    where owner = 'SCHEMA'
    and type = 'T'
    and name not in ( 'table1', 'table2', 'table3', 'table4', 'tableA', 'tableB' );
    

    否则,您可能必须构建一个快速临时表来将所有表名导入并继续使用第一个示例。


    更新帖子评论:

    最后,在您最近发表评论之后,我意识到我误解了您的问题并把它倒退了。要翻转它并从列表中找到不在 SCHEMA 中的表,您可以执行以下操作。 (将列表导入临时表后)。

    select mytablename from templistoftables
    where mytablename not in 
    (select name from sysibm.systables
    where owner = 'SCHEMA'
    and type = 'T');
    

    【讨论】:

    • 不幸的是,它在一个 .txt 文件中 :-( 我有一个从 Oracle 源创建的表列表,我无法查询...我需要找出哪个那些尚未创建,并且只有源的导出形式。
    • 用更多信息更新了我的答案。
    • 我认为临时表会更好-在您的示例中,它将返回除列表中的表之外的所有表。我需要知道哪些表不存在,并最终编写了一个快速的 Java 小程序来完成它。感谢您的意见!
    • 啊啊啊,我明白你的意思了……抱歉。这是一个深夜,我不认为狭窄。我添加了另一个查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2016-02-15
    • 1970-01-01
    • 2017-07-01
    • 2020-04-20
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多