我正在尝试在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,不确定是什么问题?
答案 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