DB2 - 如果日期 X 的表为空,则插入,否则继续

Posted

技术标签:

【中文标题】DB2 - 如果日期 X 的表为空,则插入,否则继续【英文标题】:DB2 - If table is empty for date X, insert, else go on 【发布时间】:2014-10-31 19:34:18 【问题描述】:

--AIX 上的 DB2 版本 10

我有一个需要更新的存储过程。并想检查是否有某个日期的数据。如果数据存在,继续,否则运行插入,然后继续。

IF (SELECT COUNT(*)
    FROM SCHEMA1.TABLE1_STEP1 
    WHERE XDATE = '9/27/2014' < 1)
  THEN (INSERT INTO SCHEMA1.TABLE1_STEP1 (SELECT * FROM SCHEMA2.TABLE2 FETCH FIRST 2 ROWS ONLY))
END IF;

这个错误输出。

DB2 数据库错误:错误 [42601] [IBM][DB2/AIX64] SQL0104N 在“/2014')

有什么想法吗?

【问题讨论】:

【参考方案1】:

我猜你可能想要less than 符号在括号外...


但是,顺便说一句,您也可以在没有IF 的情况下执行这种语句(尽管我没有可用的 AIX DB2 来确定检查。它在 DB2 for z/OS 和 LUW 上工作,但是):

INSERT INTO SCHEMA1.TABLE1_STEP1
    SELECT *
    FROM SCHEMA2.TABLE2
    WHERE NOT EXISTS (
        SELECT *
        FROM SCHEMA1.TABLE1_STEP1 
        WHERE XDATE = '9/27/2014'
    )
    FETCH FIRST 2 ROWS ONLY

此外,您没有在 SCHEMA2.TABLE2 选择上提供 ORDER BY,因此您的结果可以按任何顺序返回(无论数据库引擎“最简单”的顺序)......除非您提供ORDER BY 声明。

【讨论】:

我想你的意思是WHERE NOT EXISTS。我也会这样做(或类似的方式)。 @Clockwork-Muse 是的,我误读了这个问题。我编辑了答案。 感谢您的建议和更正。由于某种原因,我无法在工作中回复。我尝试移动括号,但没有成功。只是为了知识,有没有办法用If 做到这一点? @AlHowarth - 我很确定IF 需要使用存储过程,并且您不能将其作为一个语句运行。如果你是,也许你需要两组括号(一组用于IF 条件,一组用于在&lt; 之前包装语句),或者使用HAVING(*)(尽管我仍然建议这样做)。旁注 - 最好使用带日期的 ISO 格式 (YYYY-MM-DD),因为您不太可能受到服务器/用户格式的影响。

以上是关于DB2 - 如果日期 X 的表为空,则插入,否则继续的主要内容,如果未能解决你的问题,请参考以下文章

如果表为空,则 CodeIgniter result_array() 出现布尔错误

利用顺序表的操作,实现以下的函数。

当 BIRT 报告中的表为空时显示“无数据”消息

SQL - 内连接 2 个表,但如果 1 个表为空,则返回所有表

如何参数化 Postgres-custom-function 中的表和列,如果值存在则选择 PK,否则插入并返回 PK?

Jquery 验证 - 如果表为空