Oracle合并语句和源/目标条件

问题描述 投票:0回答:1

我需要在Oracle中做一个MERGE,但我被卡住了。

在SQL Server中,我总是使用BY SOURCEBY TARGET条件来检查记录的存在位置,然后执行操作。

我有点困惑,因为我不知道如何在PL / SQL中实现相同的功能。我需要在两张桌子上做MERGEcustomerscustomers_stage)。

  • 如果客户表中不存在记录 - 则插入。
  • 如果两个记录都存在 - 那么更新。
  • 如果customers_stage中不存在记录 - 则删除。

在SQL Server中,它看起来像这样:

MERGE INTO dbo.Customers AS target
USING dbo.Customers_stage AS source ON target.ID = source.ExternalID

WHEN NOT MATCHED BY TARGET 
   THEN 
      INSERT

WHEN MATCHED 
   THEN
      UPDATE

WHEN NOT MATCHED BY SOURCE 
   THEN
      DELETE

如何在Oracle中实现相同的功能?我使用SQL Developer。

非常感谢你。

sql sql-server oracle merge dml
1个回答
1
投票

它在Oracle中类似:

MERGE INTO dbo.Customers a
  USING dbo.Customers_stage b
    ON (a.ID = b.ExternalID)
  WHEN MATCHED THEN
    UPDATE SET a.col1 = b.col1
    DELETE 
    WHERE ID not in ( select ExternalID from Customers_stage ) 
  WHEN NOT MATCHED THEN
    INSERT (ID, status)
    VALUES (b.ExternalID, b.col1);
© www.soinside.com 2019 - 2024. All rights reserved.