使用更新合并插入新行
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'')
我有下面的合并查询,我想在其中更新日期和性能问题,我正在使用 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'')