合并使用更新插入新行

时间:2017-09-07 06:23:43

标签: oracle merge insert sql-update rowid

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

但我想知道无论如何插入新行?我只是想更新表TEST_GRP并且不想要任何新行的插入。

由于我第一次使用ROWID逻辑,我真的不确定它是插入新行还是仅更新表。

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';

2 个答案:

答案 0 :(得分:2)

它会毫无问题地更新行,也不会插入新行。

在UPDATE statment probalie中,它可能会导致格式掩码SET DT_DATE = to_date(' 01.01.2017',' dd.mm.yyyy' ')DT_DATE!= to_date(' 01.01.2016','' dd.mm.yyyy'')

答案 1 :(得分:1)

您不必按docs中所述的merge语句添加insert子句:

  

merge_update_clause ...您可以单独指定此子句,也可以使用   merge_insert_clause

你没有密码,所以不会插入插件。

merge_insert_clause: