Merge 如何在DB2中更新或插入同一个表

Merge 如何在DB2中更新或插入同一个表,merge,db2,db2-luw,Merge,Db2,Db2 Luw,我试图在DB2(V9.7)的同一个表中更新if exists或插入if not exists 我有一个表“V_OPORNAC”(scheme是SQLDBA),其中包含三列和两个主键:IDESTE(PK)、IDEPOZ(PK)、OPONAR 我的情况是,如果IDESTE=123456和IDEPOZ=0的数据(OPONAR)不存在,则插入新行,如果存在,则更新(OPONAR)。我试过这个: MERGE INTO SQLDBA.V_OPONAROC AS O1 USING (SELECT IDEST

我试图在DB2(V9.7)的同一个表中更新if exists或插入if not exists

我有一个表“V_OPORNAC”(scheme是SQLDBA),其中包含三列和两个主键:IDESTE(PK)、IDEPOZ(PK)、OPONAR

我的情况是,如果IDESTE=123456和IDEPOZ=0的数据(OPONAR)不存在,则插入新行,如果存在,则更新(OPONAR)。我试过这个:

MERGE INTO SQLDBA.V_OPONAROC AS O1 
USING (SELECT IDESTE, IDEPOZ, OPONAR FROM SQLDBA.V_OPONAROC WHERE IDESTE = 123456 AND IDEPOZ = 0) AS O2
    ON (O1.IDESTE = O2.IDESTE)
WHEN MATCHED THEN
    UPDATE SET 
         OPONAR = 'test text'
WHEN NOT MATCHED THEN
    INSERT 
        (IDESTE, IDEPOZ, OPONAR) 
        VALUES (123456, 0, 'test new text')
执行上面的代码时,我遇到错误:

Query 1 of 1, Rows read: 0, Elapsed time (seconds) - Total: 0,013, SQL query: 0,013, Reading results: 0
Query 1 of 1, Rows read: 3, Elapsed time (seconds) - Total: 0,002, SQL query: 0,001, Reading results: 0,001
Warning:   DB2 SQL Warning: SQLCODE=100, SQLSTATE=02000, SQLERRMC=null, DRIVER=4.21.29
SQLState:  02000
ErrorCode: 100
我通过使用“SYSIBM.SYSDUMMY1”找到了答案

MERGE INTO SQLDBA.V_OPONAROC AS O1 
USING (SELECT 1 AS IDESTE, 2 AS IDEPOZ, 3 AS OPONAR FROM SYSIBM.SYSDUMMY1) AS O2
    ON (O1.IDESTE = 123456 AND O1.IDEPOZ = 0)
WHEN MATCHED THEN
    UPDATE SET 
        O1.OPONAR = 'test text'
WHEN NOT MATCHED THEN
    INSERT 
        (O1.IDESTE, O1.IDEPOZ, O1.OPONAR) 
        VALUES (123456, 0, 'test new text')