2017-09-07 91 views
0

我有下面的合并查询,我想更新日期和perfromnce问题我使用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'; 
+0

我很好奇为什么日期在你的更新中与where子句不同。 “除非日期为01.01.2016,否则更新至01.01.2017”。 –

回答

1

您不必插入子句添加到merge声明作为docs说:

merge_update_clause ...您可以通过自身或与 merge_insert_clause指定此条款

而你没有在它的代码,所以不插入(S)会发生。

merge_insert_clause:

2

它将更新没有问题的行和不插入新行。

在您的UPDATE语句probalie中,它会导致您在格式掩码SET DT_DATE = to_date('01 .01.2017',''dd.mm.yyyy'')DT_DATE!= to_date('01 .01.2016' ,''dd.mm.yyyy'')