是否可以在合并查询中分别插入和更新行数?
SQL%COUNT
给出合并的总行数。
一个解决方案可能是,每当您插入或更新一行时..您在表中插入一个代码,例如:
code=1 --> if insert
code=2 --> if update
因此,当您需要计数时,请在 where 子句中使用该条件
SQL%COUNT 给出合并的总行数。
sql℅rowcount
为您提供受MERGE 语句影响的总行数。它不能分解INSERT/UPDATE/DELETE
行数。
但是你可以通过写sql%rowcount
来分解合并
了解之前和之后的总行数后merge
,您可以在简单的算术计算中利用此信息:
┌───────────────┐
▲ ▲ │ │
│ │ │ │
│ │ │ │
│ │ │ │
count_before│ │ │ │
│ │ │ │
│ │ │ │
│ │ │UUUUUUUUUUUUUUU│ ▲ ▲
│ │ │UUUUUUUUUUUUUUU│ │rows_updated │
▼ │ │UUUUUUUUUUUUUUU│ ▼ │
│ │IIIIIIIIIIIIIII│ ▲ │sql%rowcount
count_after│ │IIIIIIIIIIIIIII│ │rows_inserted │
│ │IIIIIIIIIIIIIII│ │ │
▼ │IIIIIIIIIIIIIII│ ▼ ▼
└───────────────┘
select count(*) into count_before from table_name;
merge into table_name ...;
rows_merged := sql%rowcount;
select count(*) into count_after from table_name;
rows_inserted := count_after - count_before;
rows_updated := rows_merged - rows_inserted;
(信用:asciiflow.com)
添加一个 delete_count = count_before - count_after。如果 count_after 小于 count_before,将更改插入更新计数的结果。
使用合并条件单独语句计算删除的案例以了解删除了多少。sql%rowcount 可以做到这一点。