DB2 on Cloud: ЗАМЕНА КОНФЛИКТА - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь добавить ON CONFLICT REPLACE ограничение в таблице IBM Bluemix DB2 (on Cloud)

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 голосов
/ 25 апреля 2018

Этот документ https://sqlite.org/lang_conflict.html говорит

ON CONFLICT ... является нестандартным предложением ... он не является частью стандартного SQL

Поэтому, возможно, не удивительно, что Db2 не поддерживает это нестандартное предложение.В целом, хотя SQL имеет стандарт ISO, как говорит Википедия https://en.wikipedia.org/wiki/SQL

Несмотря на существование таких стандартов, большая часть кода SQL не является полностью переносимой среди различных систем баз данных без корректировок

Если вам нужно «заменить» строку, если строка уже существует с таким же значением ключа, вы, вероятно, захотите использовать оператор MERGE вместо INSERT в Db2.https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0010873.html

...