DB2 on Cloud:ON CONFLICT REPLACE

时间:2018-04-24 20:50:51

标签: db2 ibm-cloud

我正在尝试在IBM bluemix DB2(在云端)表中添加 ON CONFLICT REPLACE 约束

CREATE TABLE DEVICE_TABLE (
    DEVICE_ID VARCHAR(255) NOT NULL,
    DEVICE_NAME VARCHAR(255),
    DEVICE_MAC VARCHAR(255),
    UNIQUE (PANEL_DEVICE_ID) ON CONFLICT REPLACE
}

但是在创建时它会给出错误

"CONFLICT" is an undefined name.. SQLCODE=-204, SQLSTATE=42704, DRIVER=4.22.36

同一个表适用于SQLITE3,但不适用于DB2,不确定是什么问题?

1 个答案:

答案 0 :(得分:0)

此文档https://sqlite.org/lang_conflict.html

  

ON CONFLICT ...是一个非标准的子句......它不是标准SQL的一部分

因此,Db2不支持这个非标准条款可能并不出人意料。一般来说,虽然SQL确实有ISO标准,但维基百科说https://en.wikipedia.org/wiki/SQL

  

尽管存在这样的标准,但大多数SQL代码在没有调整的情况下不能在不同的数据库系统中完全移植

如果您需要"替换"如果行已存在且具有相同的键值,则可能需要使用MERGE语句而不是Db2中的INSERT。 https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0010873.html