丢失在DB2更新语句中

时间:2012-02-28 08:34:58

标签: sql db2 timestamp

我尝试使用另一个表更新表。我得到错误号码407.它说我尝试在一个无法容错的列中插入一个null。

我检查了它的列my_TIMESTAMP列。通常它不能为空。因为我用current timestamp更新了colum,n。它应该生成一个时间戳。问题出在哪儿?

    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 :(得分:0)

由于无法访问数据,因此回答并非易事。但是你尝试使用这样的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)

答案 1 :(得分:0)

我将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            
    );