В настоящее время у меня есть одна таблица FIRST_ENTRY_TABLE с PLAN_A, а другие 11 таблиц имеют соответствующие customer_ID относительно PLAN_A. У меня есть временная таблица с новым ключом, который заменит PLAN_A и добавит PLAN_B для соответствующих customer_is.
Ниже описана процедура 12 PL / SQL, которая вставляет / обновляет новый PLAN_B во все необходимые таблицы в соответствии с customer_id.
Поскольку существует около 100 000 ПЛАНОВ, которые будут заменены НОВЫМ КЛЮЧОМ ПЛАНА для customer_ids.
Сначала я создаю курсор и читаю все новые КЛЮЧИ для обновления в 12 таблицах.
Затем соответственно вставка / обновление запроса в 12 таблиц через 12 процедур.
DECLARE
var1
CURSOR C1
select query fetching PLAN_B key from temp table
PROCEDURE procedure1(
P_key IN OFFTABLE%TYPE;
IS
BEGIN
INSERT into FIRST_ENTRY_TABLE(
mandator_key,OFFER_TYPE_KEY,offer_key)VALUES('abc','FIXED',P_key)
RETURNING ID
INTO var1;
END procedure1;
)
PROCEDIRE procedure2(
P_key IN OFFTABLE%TYPE;
oldid IN FIRST_ENTRY_TABLE%TYPE;
)
IS
BEGIN
INSERT into SECOND_ENTRY_TABLE(col1,col2...custid)
select (col1,col2...var1) FROM sometable WHERE offer_key= P_key;
UPDATE SECOND_ENTRY_TABLE set custid=var1 where custid=oldid;
END procedure2;
simplarly procedure3
procedure4.. procedure5
--------procedure12
COMMIT;
Мой вопрос заключается в том, как здесь выполнять обработку исключений, поскольку у меня есть все операторы вставки и обновления.
Я знаю, что нужно использовать NO_DATA_FOUND, какие могут быть все другие исключения и как мы можем справиться с этим здесь.
Как обработать исключение, в конце концов после выполнения всех процедур и COMMIT или внутри каждой процедуры?
Как получить откат со всех 12 таблиц? там будет сценарий удаления для новых вставленных ключей и запрос на обновление для PLAN, обновляемый в нескольких таблицах. но будет более 100 тыс. записей. Есть ли способ написать процедуру для выполнения отката перед выполнением процедур?