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

DB2—如果表中的日期X为空,则插入,否则继续,db2,Db2,-AIX上的DB2版本10 我有一个存储过程,需要更新。并希望检查是否有特定日期的数据。如果数据存在,请继续,否则请运行insert,然后继续 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

-AIX上的DB2版本10

我有一个存储过程,需要更新。并希望检查是否有特定日期的数据。如果数据存在,请继续,否则请运行insert,然后继续

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之后发现意外的令牌。预期的令牌可能包括:。SQLSTATE=42601


有什么问题吗?

我猜你可能想要括号外的小于号

不过,顺便说一句,您也可以在不使用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 select上提供orderby,因此您的结果可以以数据库引擎最容易的任何顺序返回。。。除非您通过声明提供订单,否则无法保证订单。

我想您指的是不存在的地方。“我也会这样做,或者类似的事情。”发条工缪斯说,“是的,我误解了这个问题。我编辑了答案。谢谢你的建议和更正。由于某种原因,我在工作中无法回答。我试着移动括号,但没用。为了了解情况,有没有一种方法可以使用If?@AlHowarth-我非常确定If需要使用存储过程,并且不能将其作为一个语句运行。如果是,可能需要两组括号,一组用于If条件,另一组用于在