我尝试使用另一个表更新表。我得到错误号码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
);
答案 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
);