Потерян в обновлении DB2 - PullRequest
       23

Потерян в обновлении DB2

1 голос
/ 28 февраля 2012

Я пытаюсь обновить таблицу, используя другую таблицу.Я получаю ошибку с номером 407. Там написано, что я пытаюсь вставить ноль в ненулевой столбец.

Я проверил столбец это столбец my_TIMESTAMP.Обычно это не может быть нулевым.Потому что я обновляю colum, n с current timestamp.Это должно генерировать метку времени.В чем проблема?

    UPDATE table1 mytable
    SET (
      my_PROCESS,
      my_TIMESTAMP,
      col3, 
      COL5
    ) = (
    SELECT
      (select PROCESSNAME from table3),
      current timestamp,
      COL3,
      COL5  
    FROM table2 mytable2
    WHERE mytable.COL4 = mytable2.COL4  
    )
    WHERE EXISTS (
        SELECT 'x'
        FROM table1 mytable1, table2 mytable21
        WHERE mytable1.COL4 = mytable21.COL4            
    );

Ответы [ 2 ]

0 голосов
/ 26 марта 2012

Я заменяю условие where exists на where ... IN изменил условие where.

 UPDATE table1 mytable
    SET (
      my_PROCESS,
      my_TIMESTAMP,
      col3, 
      COL5
    ) = (
    SELECT
      (select PROCESSNAME from table3),
      current timestamp,
      COL3,
      COL5  
    FROM table2 mytable2
    WHERE mytable.COL4 = mytable2.COL4  
    )
    WHERE mytable.id IN (
        SELECT mytable1.id
        FROM table1 mytable1, table2 mytable21
        WHERE mytable1.COL4 = mytable21.COL4            
    );
0 голосов
/ 12 марта 2012

Нетрудно ответить из-за отсутствия доступа к данным.Но пытались ли вы в качестве обходного пути использовать команду MERGE INTO, как это?В этом случае вы можете проверить объединенные данные, выполнив только оператор в USING.Конечно, вы можете добавить предикат в этот оператор, чтобы сделать набор строк короче.

MERGE INTO TABLE1 AS T1
USING (SELECT T3.PROCESSNAME_1 AS MY_PROCESS, T2.COL3, T2.COL4, T3.COL5
FROM TABLE3 T3, TABLE2 T2) AS Q1
ON T1.COL4 = Q1.COL4
WHEN MATCHED THEN
UPDATE SET (MY_PROCESS, MY_TIMESTAMP, COL3, COL5) =
(Q1.MY_PROCESS, CURRENT TIMESTAMP, Q1.COL3, Q1.COL5)
...