1 таблица со структурой таблицы -
create table t_output
( id integer,
desc varchar2(10),
inv_bfr integer,
inv_afr integer,
new_bfr integer,
new_afr integer,
diff integer generated always as (inv_afr - inv_bfr) );
При запуске выполняется одна операция вставки DML, после которой обновляется столбец inv_afr
.
select distinct b.sid from tab_a a, tab_b b where a.sid = b.sid
Приведенный выше запрос выбора использовался для считать до sid
до и после выполнения операции DML. inv_bfr, inv_afr, new_afr, new_bfr
все в счетах. Столбец new_bfr
будет обновляться, если sid
существует до выполнения операции DML, но не после операции DML. Если для столбца new_afr
то же самое, он будет обновляться, если sid
существует после выполнения операции DML, но не до выполнения операции DML.
при выполнении операции DML вставка записи в таблицу tab_ c
Поэтому я использую оператор MERGE
для объединения этих 3 столбцов (inv_bfr, new_bfr, new_afr
). Для столбца inv_afr
MERGE
оператор может получить, но не может получить правильный вывод при MERGE
этих 2 столбцах (new_bfr, new_afr
). Я использую в MERGE
для обновления этих двух значений столбцов - (например, столбца new_bfr)
merge into t_output t
using (select a.sub_id, count(distinct b.sid) as new_bfr
from tab_a a, tab_b b
where a.sid = b.sid
and not exists
(select distinct c.sid from tab_c c)
group by a.sub_id) bfr
when matched then
update set t.new_bfr = bfr.new_bfr;
Для new_afr я использовал MERGE
оператор as-
merge into t_output t
using (select c.sub_id, count(distinct c.sid) as new_afr from tab_c c
where not exists
(select distinct b.sid
from tab_a a, tab_b b
where a.sid = b.sid)
group by c.sub_id) afr
when matched then
update set t.new_afr = afr.new_afr;
Но когда я выполняю оба оператора MERGE
в одном и том же операторе блока PL / SQL, но не могу получить правильный вывод. Даже если я проверил одно за другим оператор MERGE
и использовал предложение WHEN NOT MATCHED
, то также не смог получить правильный вывод. Не могли бы вы помочь мне в этом.