У меня есть ситуация, когда логическая инструкция DML может быть изменена в любой момент времени, но другая часть останется прежней.
Короче говоря, мне нужно создать шаблон, в который я могу добавить 1 или несколькоКоманда DML и сообщение о том, что мне нужно вычислить общее количество строк, затронутых командой DML.
Для текущей ситуации у меня есть команда DML в цикле For, и внутри цикла существует другая таблица для действия обновления.
Структура SQL:
CREATE TABLE TEMP_A
(NAME VARCHAR2(20), ID VARCHAR2(20)
);
INSERT INTO TEMP_A VALUES
('SAM',100
);
INSERT INTO TEMP_A VALUES
('SAM',100
);
INSERT INTO TEMP_A VALUES
('SAM',100
);
INSERT INTO TEMP_A VALUES
('JACK',200
);
INSERT INTO TEMP_A VALUES
('JACK',200
);
INSERT INTO TEMP_A VALUES
('JACK',200
);
INSERT INTO TEMP_A VALUES
('HAMES',300
);
INSERT INTO TEMP_A VALUES
('HAMES',300
);
INSERT INTO TEMP_A VALUES
('HAMES',300
);
COMMIT;
CREATE TABLE TEMP_C
(NAME VARCHAR2(20), ID VARCHAR2(20)
);
INSERT INTO TEMP_C VALUES
('SAM',100
);
INSERT INTO TEMP_C VALUES
('RAM',100
);
INSERT INTO TEMP_C VALUES
('KAM',200
);
COMMIT;
CREATE TABLE TEMP_B
(ID VARCHAR2(20));
INSERT INTO TEMP_B VALUES(100);
INSERT INTO TEMP_B VALUES(200);
INSERT INTO TEMP_B VALUES(300);
COMMIT;
Блок PLSQL:
DECLARE
i number(2);
BEGIN
FOR i in (select ID from TEMP_B) loop
merge into TEMP_A c
using( select i.ID new_id from dual) t
on
(t.new_id = i.ID)
when matched then update set
c.id = 555;
merge into TEMP_C c
using( select i.ID new_id from dual) t
on
(t.new_id = i.ID)
when matched then update set
c.id = 555;
end loop;
dbms_output.put_line('Total affecetd records are :' || SQL%ROWCOUNT);
END;
/
Вывод:
Total affected records are :3
В идеале я искал вывод как 12 (Общее количество не затронутых строк из обеих таблиц внутри цикла), но я получаю выходные данные только для последнего запроса, что должно быть сделано, если мне нужно получить выходные данные всех строк, затронутых внутри цикла, блок DML можно изменить в любойя не могу добавить пользовательский оператор SQL% ROWCOUNT и объединить его. Я ищу общий подход, если таковой имеется.