Работает ли атрибут sql% rowcount в состоянии l oop? - PullRequest
1 голос
/ 05 марта 2020

Я написал следующую программу на PL / SQL, чтобы вставить 5 строк в таблицу учеников. Согласно условию l oop количество строк должно быть 5, но оно показывает только 1. Размещение вывода СУБД под l oop также не помогло.

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;

1 Ответ

1 голос
/ 05 марта 2020

В вашем примере, когда вы вставляете одну строку за раз (insert into ... values ...), SQL%ROWCOUNT устанавливается в 1 на каждой итерации.

Следовательно, в этом контексте это в значительной степени бесполезно. Создайте локальную переменную и увеличивайте ее каждый раз (аналогично тому, что вы делаете с v_counter), например,

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;
...