sql%rowcount中的sql是oracle的内部游标,rowcount的意思是之前的dml sql语句影响的多少行数据。这个参数必须要在一个修改语句和commit之间放置,否则你就得不到正确的修改行数。
sql%bulk_rowcount(i)表示每一次的操作所影响的行数,该值是存在一个集合里,forall中的第n条dml语句处理的行数存储在该集合的第n个元素中
SQL> declare
type type_name is table of test.name%type ;
tab_name type_name :=type_name('aaa','bbb','ccc','ddd','eee');
begin
forall name_idx in
tab_name.first .. tab_name.last
update test set salary=salary+500
where name = tab_name(name_idx);
dbms_output.put_line(sql%rowcount||'行记录被更新!');
for i in 1 .. tab_name.count loop
dbms_output.put_line('名称为'||tab_name(i)||'的记录共有'||sql%bulk_rowcount(i)||'被更新!');
end loop;
end;
/
8行记录被更新!
名称为aaa的记录共有1被更新!
名称为bbb的记录共有3被更新!
名称为ccc的记录共有2被更新!
名称为ddd的记录共有1被更新!
名称为eee的记录共有1被更新!
PL/SQL procedure successfully completed.