使用更新合并插入新行

Merge using update insert new rows

我有下面的合并查询,我想在其中更新日期和性能问题,我正在使用 ROWID 逻辑。

但我想知道它是否会插入新行?我只想更新 table TEST_GRP 并且不想插入任何新行。

因为我是第一次使用 ROWID 逻辑,所以我真的不确定它是插入新行还是只更新 table。

MERGE INTO TEST_GRP tgt
  USING (SELECT ID,
                ROWID r_id,
                row_number() over (partition by ID ORDER BY DT_DATE) rn
         FROM   TEST_GRP) src
    ON (tgt.rowid = src.r_id AND src.rn = 1)
WHEN MATCHED THEN
  UPDATE SET DT_DATE = to_date('01.01.2017', ''dd.mm.yyyy'')
  WHERE DT_DATE != to_date('01.01.2016', ''dd.mm.yyyy'')
  and DB_NAME = 'ARD';

您不必向 merge 语句添加插入子句,如 docs 中所述:

merge_update_clause ... You can specify this clause by itself or with the merge_insert_clause

而且您的代码中没有您的代码,因此不会发生插入。

merge_insert_clause:

它将毫无问题地更新行并且不会插入新行。

在您的更新声明中,它可能会导致您在格式掩码 SET DT_DATE = to_date('01.01.2017', ''dd.mm.yyyy'') DT_DATE != to_date('01.01.2016', ''dd.mm.yyyy'')