DB2 for IBM iSeries:IF EXISTS 语句语法

kev*_*rpe 3 db2 syntax if-statement exists ibm-midrange

我熟悉Sybase,它允许使用以下格式进行查询:IF EXISTS () THEN ... ELSE ... END IF(或非常接近)。这是一个强大的语句,允许:“如果存在,则更新,否则插入”。

我正在 IBM iSeries 机器上编写 DB2 查询。我已经看到了 CASE 关键字,但我无法使其工作。我总是收到错误:“不需要关键字 CASE。”

样本:

如果存在(从 MYTABLE WHERE KEY = xxx 中选择 *)
然后更新 MYTABLE 设置值 = zzz WHERE KEY = xxx
否则插入 MYTABLE (KEY, VALUE) VALUES (xxx, zzz)
万一

有没有办法针对 IBM iSeries 上的 DB2 执行此操作?目前,我运行两个查询。首先是选择,然后我的 Java 代码决定更新/插入。我宁愿编写一个查询,因为我的服务器位于很远的地方(横跨太平洋)。

War*_*enT 5

+更新+

DB2 for i,从版本 7.1 开始,现在有一个MERGE语句可以满足您的需求。

>>-MERGE INTO--+-table-name-+--+--------------------+----------->
               '-view-name--'  '-correlation-clause-'   

  >--USING--table-reference--ON--search-condition----------------->

     .------------------------------------------------------------------------.   
     V                                                                        |   
  >----WHEN--+-----+--MATCHED--+----------------+--THEN--+-update-operation-+-+----->
             '-NOT-'           '-AND--condition-'        +-delete-operation-+     
                                                         +-insert-operation-+     
                                                         '-signal-statement-'     
Run Code Online (Sandbox Code Playgroud)

请参阅IBM i 7.1 InfoCenter DB2 MERGE 语句参考页