插入查询后的行数和选择查询的行数

时间:2015-01-13 14:01:22

标签: sql oracle count

我正在将记录插入表中,并使用选择查询来获取值。

insert into my_table (....) 
select a.name, b.age, c.id, d.address 
from table1 a, table2 b, table3 c, table4 d 
where a.age=23 and d.addredd like '%street%';

我想比较select_Query的rowcount和my_table的rowcount(插入后)。

如何在不花费更多处理时间的情况下获取两者的行数。

由于

2 个答案:

答案 0 :(得分:0)

要获得插入行的总数,您可以使用SQL%ROWCOUNT

DECLARE

BEGIN
insert into my_table (....) 
select a.name, b.age, c.id, d.address 
from table1 a, table2 b, table3 c, table4 d 
where a.age=23 and d.addredd like '%street%';

DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
END;

修改

其他方法是创建一个返回该值的函数:

CREATE OR REPLACE FUNCTION get_count_inserted
   RETURN NUMBER
IS
   PRAGMA AUTONOMOUS_TRANSACTION;
   RESULT   NUMBER;
BEGIN
   insert into my_table (....)  -- Your query
   select a.name, b.age, c.id, d.address 
   from table1 a, table2 b, table3 c, table4 d 
   where a.age=23 and d.addredd like '%street%';

   RESULT := SQL%ROWCOUNT; --getting the count

   COMMIT;

   RETURN RESULT; --returning result
END;

创建功能后,您可以像这样查询:

SELECT get_count_inserted FROM DUAL; --this will return total of rows inserted

答案 1 :(得分:0)

  

如何在不花费更多处理时间的情况下获取两者的行数。

INSERT 之前和之后 COUNT 的时间将少于您发布问题的时间: - )

所以,不要让事情变得复杂,只需在INSERT进入表之前和之后查询COUNT的ROWS。无需将行计数为select,因为insert之前和之后的行数差异与select的行数相同。如果您仍想验证,可以选择选择并检查差异,结果会相同。

不必要地引入PL / SQL只是为了使用SQL℅ROWCOUNT并不是一个好主意。普通插入应该在纯SQL中完成。