[DB2] MERGE z użyciem VALUES i SELECT

0

Witajcie,
Potrzebuję Waszej pomocy. Niestety nie jestem bazodanwocem ale czasem jakieś zapytania trzeba napisać. I właśnie stanąłem przez napisaniem z pozoru prostego MERGE'a. Chodzi o to, by parametry były przekazywane z wartości jakie wpiszę w zapytaniu natomiast jeden parametr chcę pobierać z innej tabeli. Nie wiem czy użyłem dobrych słów aby to pisać. Poniżej zapytanie które oczywiście nie działa. Jak wywalą ten nawias z selectem i dam tam po prostu jakąś wartość to rzecz jasna działa no ale niestety nie mogę tego tak zrobić. To jedno pole musi być zaciągane z innej tabeli. Pomożecie?

MERGE INTO TABLE_1 AS u
  USING (VALUES ((SELECT ATTR FROM TABLE_2 WHERE ID = '123'), '999999',CURRENT_DATE,  'N')) AS m
         (ID, USER_ID, INSERT_DATE, ACTIVE) ON
         u.USER_ID = m.USER_ID
  WHEN MATCHED THEN
     UPDATE SET
        u.ACTIVE = m.ACTIVE
  WHEN NOT MATCHED THEN
     INSERT
        (ID, USER_ID, INSERT_DATE, ACTIVE)
        VALUES (m.ID, m.USER_ID, m.INSERT_DATE, m.ACTIVE);
1

Nie działa, bo co ? Bo jest błąd czy daje złe wartości?

0

Sory, nie napisałem. Nie działa ponieważ jest błąd.

SQL Error [23502]: Assignment of a NULL value to a NOT NULL column "TBSPACEID=2, TABLEID=400, COLNO=0" is not allowed.. SQLCODE=-407, SQLSTATE=23502, DRIVER=4.23.42

A jeszcze uprzedzając kolejne pytanie :), tak zapytanie:

SELECT ATTR FROM TABLE_2 WHERE ID = '123'

wykonane osobno, zwraca wartość (1 rekord).

1

A jak wyglądają DDL tych tabel ? Odpaliłem to na testowej bazie i przeszło (ale table_2 ma tylko 2 pola int (id i attr) a table_1 pole ID ma zdefiniowane jako int not null). Może zrób kopię table_1 i wywal wszystkie klauzule not null i zobacz, czy wtedy zadziała.

1 użytkowników online, w tym zalogowanych: 0, gości: 1