将查询从合并转换为选择Oracle中的计数

时间:2019-02-12 11:03:56

标签: sql oracle sql-merge

我使用以下语法进行合并查询:

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)

2 个答案:

答案 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;

我将其存储到局部变量中,以便以后可以对它进行 处理(将其与其他值进行比较)。