У меня есть сценарий, в котором может быть несколько операторов DML внутри моего блока PLSQL, я искал какой-то общий подход, с помощью которого я мог бы вычислить общее количество не затронутых строк, используя этот блок кода.
ТестДанные и структура для справки:
create table cust_temp_a
(Name varchar2(100), id varchar2(100));
insert into cust_temp_a VALUES
('Hasu','10');
insert into cust_temp_a VALUES
('Aasu','20');
insert into cust_temp_a VALUES
('Basu','30');
insert into cust_temp_a VALUES
('Casu','10');
commit;
create table cust_temp_b
(Name varchar2(100), id varchar2(100));
insert into cust_temp_b VALUES
('Hasu','10');
insert into cust_temp_b VALUES
('Aasu','20');
insert into cust_temp_b VALUES
('Basu','30');
insert into cust_temp_b VALUES
('Casu','20');
commit;
Может существовать несколько таблиц, подобных этой,
Ниже представлен блок PLSQL с возможностью регистрации количества затронутых строк:
DECLARE
affected_count_a number;
affected_count_b number;
total_affected_count number;
PROCEDURE proc(affected_count_a OUT number,affected_count_b OUT number) IS
BEGIN
update cust_temp_a set name = 'new_val' where id = 10;
affected_count_a:=sql%rowcount;
update cust_temp_b set name = 'new_val' where id = 20;
affected_count_b:=sql%rowcount;
END;
BEGIN
proc(affected_count_a,affected_count_b);
total_affected_count:=affected_count_a+affected_count_b;
dbms_output.put_line('total_affected_count : ' || total_affected_count );
dbms_output.put_line('affected_count_a : ' || affected_count_a);
dbms_output.put_line('affected_count_b : ' || affected_count_b );
END;
/
commit;
Результат:
total_affected_count : 4
affected_count_a : 2
affected_count_b : 2
В процедуре "proc" может существовать несколько операторов DML, и я хотел бы применить какой-то общий подход для регистрации индивидуального количества каждого оператора DML и, наконец, совокупного значения, на которое влияет"proc".
Добавление оператора DML каждый раз и добавление соответствующей переменной к числу журналов - это боль.