2012-02-15 60 views
4

我想使用db2合併語句作爲jdbc語句提交它。 我處於以下情況。我正在使用專有的持久層,我正在處理一個實體,我不知道它是否已經存在,我想使用merge語句來插入或更新數據庫中的一行。 這可能嗎? 想我與表工作有三列:ID,姓名,姓,我處理與ID =「5」的實體,名字=「吸盤」,姓=「諾里斯」我是能發出:Db2從動態值jdbc合併

MERGE INTO people AS t 
    USING (select '5' as id, 'chuck' as name, 'norris' as surname from SYSIBM.SYSDUMMY1)As s 
    ON (t.id = s.id) 
    WHEN MATCHED THEN 
     UPDATE SET t.name=s.name, t.surmane=s.surname 
    WHEN NOT MATCHED THEN 
    INSERT 
     (id, name, surname) 
    VALUES (s.id, s.name, s.surname) 

這樣的說法?我試圖這樣做,但我得到了一個錯誤。我不認爲這是允許使用選擇使用後:

USING (select '5' as id, 'chuck' as name, 'norris' as surname from SYSIBM.SYSDUMMY1)As s 

我也tryed做:

USING VALUES('5','chuck','norris') AS s(id,chuck,norris) 

,但它不到風度的工作。任何幫助,將不勝感激。 此外,是否有人知道是否可以在準備好的聲明中使用這樣的聲明,用'?'替換表達爲USING部分的真實值。佔位符以便使用setXXX()方法將它們設置爲準備好的語句?

感謝

感謝 費爾

回答

5

MERGE爲您的數據的語法將是這樣的,假設你使用DB2的Linux/Unix/Windows的(LUW)。 VALUES子句用於USING部分的括號。

另外,如果您使用的是LUW,則無法在LUW 9.5或更低版本中動態準備MERGE(I.E.,您的查詢不能有參數標記)。這是在LUW 9.7中添加的。

MERGE INTO people AS t USING (
     VALUES (5, 'Chuck', 'Norris'), 
      (6, 'John', 'Smith'), 
      (7, 'Abraham', 'Lincoln') 
      -- maybe more rows 
    ) AS s (id, name, surname) 
    ON t.id = s.id 
    WHEN MATCHED THEN 
     UPDATE SET t.name=s.name, t.surname=s.surname 
    WHEN NOT MATCHED THEN 
     INSERT (id, name, surname) 
       VALUES (s.id, s.name, s.surname) 

但是,你用全查詢實際的問題可能是你在UPDATE SET t.name=s.name, t.surmane=s.surname在你查詢的一些錯別字......例如「surmane」

+1

非常感謝!它的工作......顯然有括號的問題......正確的使用是你寫的! :) – filmac 2012-02-15 14:21:36