Oracle存储过程中如何获得DELETE语句执行后删除的记录数?

V_SQL2 := 'DELETE a ';
EXECUTE IMMEDIATE V_SQL2;
COMMIT; 实际中由于表名A为动态赋值,所以必须用这样的方式执行SQL,那如何能得到删除a的多少记录数呢?EXECUTE IMMEDIATE V_SQL2 into 变量 会报错。

存储过程中可以通过在delete语句执行的前后分别select count(*) from tablename 查询出当前表的记录条数,然后相互相减就可以得到delete语句删除的条数。

create or replace procedure p_procedure as
num integer;
beforenum integer;
afternum integer;
begin
  select count(*) into beforenum from tb1;
   EXECUTE IMMEDIATE 'delete from tb1 where .';
  select count(*) into afternum from tb1;
  num := beforenum - afternum;
end;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-03
sql%rowcount就行。
其中的sql是oracle的内部游标,rowcount的意思是之前的dml sql语句影响的多少行数据。
如果是delete操作rowcount就是delete的数据,如果是insert,就是插入的数量......

你可以在过程中加入这句去测试下:
dbms_output.put_line(to_char(sql%rowcount));本回答被网友采纳
相似回答