Oracle sql%rowcount属性是否在循环条件下工作?

Oracle sql%rowcount属性是否在循环条件下工作?,oracle,plsql,rowcount,Oracle,Plsql,Rowcount,我用PL/SQL编写了下面的程序,在Students表中插入5行。根据循环条件,行计数应为5,但仅显示1。将DBMS输出放在循环下也没有帮助 DECLARE v_input_1 INT; v_input_2 VARCHAR2(15); v_input_3 VARCHAR2(10); v_counter NUMBER := 10; BEGIN v_input_1:= 0; v_input_2:= &Type_student_name;

我用PL/SQL编写了下面的程序,在Students表中插入5行。根据循环条件,行计数应为5,但仅显示1。将DBMS输出放在循环下也没有帮助

DECLARE
    v_input_1 INT;
    v_input_2 VARCHAR2(15);
    v_input_3 VARCHAR2(10);
    v_counter NUMBER := 10;
BEGIN
    v_input_1:= 0;
    v_input_2:= &Type_student_name;
    v_input_3:= &Type_student_class;
        LOOP
            INSERT INTO STUDENTS(id, student_name, student_class)
            VALUES(v_input_1+v_counter, v_input_2, v_input_3);
            v_counter:=v_counter+10;
            EXIT WHEN V_counter > 50;
    --DBMS_OUTPUT.PUT_LINE('Total rows inserted : '||SQL%ROWCOUNT);
        END LOOP;
    DBMS_OUTPUT.PUT_LINE('Total rows inserted : '||SQL%ROWCOUNT);
END;

在您的示例中,当您一次插入一行(
insert into…values…
)时,
SQL%ROWCOUNT
在每次迭代中都设置为1

因此,在这种情况下,它几乎是无用的。创建一个局部变量并每次递增(类似于使用
v_counter
所做的操作),例如


“游标属性的值始终引用最近执行的SQL语句。SQL%ROWCOUNT属性与事务的状态无关。”请查看oracle文档:@Barbaros,对于受影响的行不是1的其他情况,这会更好。谢谢你,修好了。
declare
  l_cnt number := 0;
begin
  loop
    insert ...
    l_cnt := l_cnt + sql%rowcount;
  end loop;

  dbms_output.put_line('Number of inserted rows = ' || l_cnt);
end;