我使用以下语法进行合并查询:
MERGE INTO target_table
USING source_table
ON search_condition
WHEN NOT MATCHED THEN
INSERT (col1,col2,...)
values(value1,value2,...)
WHERE <insert_condition>;
但是我想更改此查询以查看将插入多少行并使用以下查询,但是我不确定这是正确的查询:
select count(*) from target_table where not exists (select 1 from source_table where search_condition)
答案 0 :(得分:1)
MERGE
语句将source_table
中的行插入target_table
中。因此,您想计数的source_table
中还没有来自target_table
的数据。
select count(*)
from source_table
where <insert_condition>
and not exists
(
select *
from target_table
where <search_condition>
);
答案 1 :(得分:0)
您不必分别计算插入的行数。如果您在SQL * Plus中运行它,它将显示数字本身。
如果您将该MERGE用作PL / SQL过程的一部分,则应使用SQL%ROWCOUNT
:
declare
l_cnt number;
begin
merge into target_table
using ...;
l_cnt := SQL%ROWCOUNT; --> this is what you want
dbms_output.put_line('Inserted ' || l_cnt || ' rows');
end;
我将其存储到局部变量中,以便以后可以对它进行 处理(将其与其他值进行比较)。