#sql #oracle #merge #oracle11gr2
#sql #Oracle #слияние #oracle11gr2
Вопрос:
У меня есть a MERGE
с a subquery
для получения и идентификатора, и мне интересно subquery in the NOT MATCHED statement
, всегда ли выполняется или нет.
MERGE INTO CAR_STOCK st
USING CAR_PRODUCTO pro
ON (pro.id = st.producto_id AND pro.ean = ?)
WHEN MATCHED THEN
UPDATE SET st.stockActual = ?
WHEN NOT MATCHED THEN
INSERT (stockActual, local_id, producto_id, activo)
VALUES (?, ?, (SELECT id FROM car_producto WHERE ean = ?), 'S');
Спасибо!
РЕДАКТИРОВАТЬ: ?
это потому, что я использую JDBC
в PreparedStatement
.
Комментарии:
1. Он будет выполняться, если не соответствует. В чем здесь сомнения. Вы явно игнорировали действие, которое необходимо выполнить, когда упомянутые вами соединения удовлетворяют.
Ответ №1:
Нет необходимости в подзапросе, вы могли бы просто сослаться pro.id
на insert
частично, как здесь:
merge into t1 using t2 on (t1.a = t2.a)
when matched then update set t1.b = t2.b
when not matched then insert (a, b)
values (0, t2.b)
Тестовые данные и merge
результат:
create table t1 as (select 1 a, 'a01' b from dual);
create table t2 as (select 1 a, 'a05' b from dual union all select 2 a, 'bxx' b from dual );
A B
------ ---
1 a05
0 bxx