я получаю данные из серверной части системы транзакций oracle db, и это мой источник и цель, также одна и та же таблица один к одному
Мне нужно написать оператор слияния для проверки вставки или обновления на основе новых значений
Таблица исходных транзакций
create table product
(
product_id pk VARCHAR2(3 BYTE),
product_nm VARCHAR2(100 CHAR),
product_cd VARCHAR2(10 CHAR),
product_dec VARCHAR2(500 CHAR),
insert_ts date,
update_ts date,
version NUMBER(38,0),
product_interval_strt NUMBER(38,0),- these are some numeric values
product_interval_end NUMBER(38,0) - these are some numeric values
)
, поскольку ошибка выдачи etl (PDI)
Невозможно получить значение 'Integer (38 ) 'из набора результатов базы данных, индекс 11 Numeri c Overflow
, поэтому я использовал следующее, чтобы PDI считал его как Bignumber 37
CAST (product_interval_strt AS number (37,0)) INTERVAL_START, CAST (product_interval_strt Номер AS (37,0)) product_interval_end
Таблица целевых транзакций
create table product_stg
(
product_id pk VARCHAR2(3 BYTE),
product_nm VARCHAR2(100 CHAR),
product_cd VARCHAR2(10 CHAR),
product_dec VARCHAR2(500 CHAR),
insert_ts date,
update_ts date,
version NUMBER(38,0),
product_interval_strt NUMBER(38,0),- these are some numeric values
product_interval_end NUMBER(38,0) - these are some numeric values
)
, поэтому я использовал приведенное ниже, чтобы PDI считал его как Bignumber 37
CAST (product_interval_strt AS number(37,0)) INTERVAL_START ,
CAST (product_interval_strt AS number(37,0)) product_interval_end
, поэтому мне нужно подготовить оператор слияния sql, чтобы проверить, существует ли product_id, есть ли обновление, не существует, вставьте, но я не был уверен, что мне нужно использовать только приведенный ниже
мне нужно приготовить си Оператор слияния mple, если значение существует, обновить или вставить
исправьте меня, если приведенный ниже скелет / структура верна
merge into MY_TABLE tgt
using (select [expressions]
from dual ) src
on (src.key_condition = tgt.key_condition)
when matched then
update tgt
set tgt.column1 = src.column1 [,...]
when not matched then
insert into tgt
([list of columns])
values
(src.column1 [,...]);