【问题标题】:Merge using update insert new rows使用更新插入新行进行合并
【发布时间】:2017-09-07 06:23:43
【问题描述】:

我有以下合并查询,我想更新日期和性能问题,我使用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';

【问题讨论】:

  • 我很好奇为什么您的更新与 where 子句中的日期不同。 “更新到 01.01.2017,除非日期是 01.01.2016”。

标签: oracle merge insert sql-update rowid


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您不必像docs 中所述将插入子句添加到mergestatement:

    merge_update_clause ... 您可以单独指定此子句,也可以使用 合并插入子句

    而且你的代码中没有你的代码,所以不会发生插入。

    merge_insert_clause:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-27
      • 2012-10-04
      • 2014-01-15
      • 2015-10-24
      • 2012-07-29
      • 2014-05-03
      • 2021-12-14
      • 1970-01-01
      相关资源
      最近更新 更多