[英]Update one table from another table in pl\sql or oracle (only the rows changed from CDC table)
我想在Oracle 11g中编写一个更新,在这里我只想使用TableCDC中的更改来更新tableA。 我不想更新表A中的所有行,我只想更新在TableA和TableCDC之间更改的行。
Update tableA
set (tableA.col1,tableA.col2,tableA.col3)
= (select col1,Col2,Col3 from tableCDC
where tableA.ID = tableCDC.ID
and tableA.Year = tablecdc.Year)
where (tableA.col1 <> tablecdc.col1
or tableA.col2 <> tablecdc.col2
or tableA.col3 <> tablecdc.col3)
这不起作用...如何以正确的格式编写?
Update tableA A
set (col1,col2,col3)
= ( select CDC.col1,CDC.col2, CDC.Col3
FROM TableCDC CDC
WHERE A.ID = CDC.ID
AND A.YEAR = CDC.YEAR
AND
(A.col1 <> CDC.col1
OR
A.COL2 <> CDC.COL2
OR
A.COL3 <> CDC.COL3
)
)
WHERE EXISTS
(
SELECT 1
FROM TableCDC CDC
WHERE A.ID = CDC.ID
AND A.YEAR = CDC.YEAR
AND
(A.col1 <> CDC.col1
OR
A.COL2 <> CDC.COL2
OR
A.COL3 <> CDC.COL3
)
);
您有语法问题。尝试一下。
update tableA
set (tableA.col1,tableA.col2,tableA.col3)=
(
select col1,col2,col3 from tableCDC
where (tableA.id = tableCDC.id and tableA.year=tableCDC.year
and (
(tableA.col1<>tableCDC.col1)
or
(tableA.col2<>tableCDC.col2)
or
(tableA.col3<>tableCDC.col3))
))
where exists
(select 1 from tableCDC
where (tableA.id = tableCDC.id and tableA.year=tableCDC.year
and (
(tableA.col1<>tableCDC.col1)
or
(tableA.col2<>tableCDC.col2)
or
(tableA.col3<>tableCDC.col3))
));
有关oracle中更新语法的更多详细信息,请单击此处
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.