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

时间:2014-10-31 19:34:19

标签: db2

- 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意外的令牌&#34;(&#34;在&#34; / 2014&#39;之后找到)&lt; 1)那么&#34;。预期的代币可能包括:&#34;&#34;。 SQLSTATE = 42601

对于什么是错误的任何想法?

1 个答案:

答案 0 :(得分: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

此外,您未在ORDER BY选择中提供SCHEMA2.TABLE2,因此您的搜索结果可能会以任何顺序返回(无论是#34;最简单的&#34;对于数据库引擎)...除非您提供ORDER BY声明,否则无法保证订单。