[英]insert or update using if exists using merge oracle sql logic
我正在從事務系統后端 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 數值溢出
所以我使用了以下內容,以便 PDI 將其讀取為 Bignumber 37
CAST (product_interval_strt AS number(37,0)) INTERVAL_START, CAST (product_interval_strt AS number(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 是否存在做更新不存在做插入,但我不確定我只需要使用下面
如果值存在更新或插入,我需要准備一個簡單的合並語句
如果以下骨架/結構正確,請糾正我
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 [,...]);
嘗試這個
MERGE INTO product TGT
USING (SELECT product_id
,product_nm
,product_cd
,product_dec
,insert_ts
,update_ts
,version
,CAST (product_interval_strt AS number(37,0)) INTERVAL_START
,CAST (product_interval_strt AS number(37,0)) product_interval_end
FROM product_stg
) SRC
ON (SRC.product_id = TGT.product_id)
WHEN MATCHED THEN UPDATE SET TGT.product_nm=SRC.product_nm ......)
WHEN NOT MATCHED THEN INSERT (TGT.product_id, TGT.product_nm .....)
VALUES (SRC.product_id, SRC.product_nm .....);
when matched then
update tgt --> Incorrect syntax
set tgt.column1 = src.column1 [,...]
when not matched then
insert into tgt --> Incorrect syntax
MERGE
語句的語法不正確。 目標表名在MERGE INTO
語法中已經提到,不需要在UPDATE
和INSERT
子句中再次指定表名。 update 和 insert 子句的正確語法是:
WHEN MATCHED THEN
UPDATE SET TGT.product_nm = SRC.product_nm
WHEN NOT MATCHED THEN
INSERT (TGT.product_id, TGT.product_nm .....)
VALUES (SRC.product_id, SRC.product_nm .....);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.