Ошибка слияния в db2 для недопустимых атрибутов - PullRequest
0 голосов
/ 16 ноября 2018

Я использую недавно созданный оператор слияния для выполнения UPSERTS в db2.

Я думаю, что структура верна, но проблема в том, что я получаю ошибку

sqlstate[42000] syntax or access violation: Attributes not valid

Я не уверен, где именно проблема, потому что она не очень ясна, но кажется, что это может быть связано с одним из моих значений?

слияние:

MERGE INTO STATUS as S
    USING (VALUES(
                CAST(:ORDER as INT),
                CAST(:STATUS as VARCHAR),
                CAST(:IS_ACTIVE as DECIMAL(1,0)),
                CAST(:DATE_UPDATED as DATE)
                )
            )
    AS O(order, status, is_active, date_updated)    
    ON o.order = S.order_id 
WHEN MATCHED THEN UPDATE SET order_status = status, is_active = is_active, date_updated = date_updated
WHEN NOT MATCHED THEN INSERT VALUES(order, status, is_active, date_updated)

1 Ответ

0 голосов
/ 16 ноября 2018

В руководстве по DB2 for iSeries https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_72/db2/rbafzmerge.htm приведен следующий пример.

MERGE INTO employee AS t
   USING (VALUES(CAST(? AS CHAR(6)), CAST(? AS VARCHAR(12)),
                      CAST(? AS CHAR(1)), CAST(? AS VARCHAR(15)),
                      CAST(? AS SMALLINT), CAST(? AS INTEGER)))
          s (empno, firstnme, midinit, lastname, edlevel, salary)
   ON t.empno = s.empno
   WHEN MATCHED THEN
     UPDATE SET salary = s.salary
   WHEN NOT MATCHED THEN 
     INSERT (empno, firstnme, midinit, lastname, edlevel, salary)
            VALUES (s.empno, s.firstnme, s.midinit, s.lastname, s.edlevel,
                    s.salary)

Может быть, вам нужно указать имена атрибутов в SET и окончательном VALUES утверждении.

например. высказывание is_active = is_active вместо is_active = O.is_active, вероятно, сбивает с толку для DB2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...