Создайте промежуточную таблицу, например, вот так (вам нужно настроить детали столбцов в соответствии с вашей моделью данных):
create table bike_staging
(
apex_session number not null,
bike_id number not null,
bike_type varchar2(100) not null,
amount_a number,
amount_b number
);
Добавить триггер для заполнения session_id:
create or replace trigger bi_bike_staging
before insert on bike_staging for each row
begin
:new.apex_session := v('APP_SESSION');
end bi_bike_staging;
Добавьте два процесса на третью страницу мастера загрузки данных с обеих сторон процесса «Подготовка выгруженных данных», например:
Код для «удаления промежуточной таблицы» будет выглядеть следующим образом:
delete bike_staging where apex_session = :APP_SESSION;
Код для «загрузки велосипедов» может выглядеть примерно так:
merge into bikes t
using (select bike_id,
bike_type,
case bike_type
when 'BLUE' then amount_b
else amount_a
end as amount
from bike_staging
where apex_session = :APP_SESSION
) s
on (t.bike_id = s.bike_id)
when matched then update set
t.bike_type = s.bike_type,
t.amount = s.amount
when not matched then insert (bike_id, bike_type, amount)
values (s.bike_id, s.bike_type, s.amount);
delete bike_staging where apex_session = :APP_SESSION;
В качестве альтернативы, есливы только вставляете новые записи, вам не нужно объединение, вы можете использовать простой оператор вставки.