Oracle SQL оператор слияния только с 1 таблицей и набором значений
Я использую Spring JDBC и Oracle SQL.
используя класс MapSqlParameterSource класса SpringJDBC, я сопоставил данные, которые хочу объединить.
Теперь я хочу использовать оператор слияния для обновления / вставки таблицы базы данных. Все, что у меня есть, это одна таблица и набор параметров, которые я хочу объединить в нее.
merge into proj.person_registry pr
using ( ! parameters should go here somehow? )
on (pr.id = :id or pr.code = :code)
when matched then
update set pr.code = :code,
pr.name = :name,
pr.firstname = :firstname,
pr.cl_gender = :cl_gender,
pr.cl_status = :cl_status,
pr.aadress = :aadress,
pr.aadress_date = :aadress_date
when not matched then
insert values (:code, :name, :firstname, :cl_gender, :cl_status, ;aadress, :aadress_date);
Должен ли я как-то создать временную таблицу для ключевого слова using или есть другой способ? как бы мне слиться так?
Также есть два уникальных ключа pr.id и pr.code. Иногда параметр : id имеет значение null, когда это происходит, я хочу достичь оператора обновления на основе соответствия pr.code: code. Будет ли оно работать, если мое обновление содержит строку:
update set pr.code = :code,
1 ответ
Это должно работать:
merge into proj.person_registry pr
using (
select 42 as id
'xyz' as code,
'Dent' as name,
'Arthur' as firstname,
'male' as cl_gender
'closed' as cl_status,
'Somewher' as aaddress,
current_date as aaddress_date
from dual
) t on (pr.id = t.id or pr.code = t.code)
when matched then
update set pr.code = t.code,
pr.name = t.name,
pr.firstname = t.firstname,
pr.cl_gender = t.cl_gender,
pr.cl_status = t.cl_status,
pr.aadress = t.aadress,
pr.aadress_date = t.aadress_date
when not matched then
insert values (t.code, t.name, t.firstname, t.cl_gender, t.cl_status, ;aadress, t.aadress_date);
Я не знаком с шаблоном JDBC Spring, но заменяю фактические значения в select ... from dual
запрос по параметрам заполнителей должен работать.