繁体   English   中英

在DB2更新语句中丢失

[英]Lost in DB2 update statement

我尝试使用另一个表更新一个表。 我收到错误号407。它说我尝试在不可空列中插入null。

我在my_TIMESTAMP列中检查了该列。 通常,它不能为null。 因为我用current timestamp更新了column。 它应该产生一个时间戳。 问题出在哪儿?

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

由于无法访问数据,因此回答并不容易。 但是您是否尝试过使用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)

我将where exists条件替换为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            
    );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM