簡體   English   中英

在pl \\ sql或oracle中從另一個表更新一個表(僅CDC表中的行已更改)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM