Oracle 迁移ADB/Greenplum之merge into 语法
oracle迁移ADB过程中,碰到merge into(合并更新)的语法改造问题,ADB/Greenplum中不支持oracle的merge into,需要修改成ADB/Greenplum支持的INSERT ON CONFLICT覆盖写入的语法
示例演示:
Oracle语法
MERGE INTO schema. table alias
USING { schema. table | views | query} alias
ON {
(condition) }
WHEN MATCHED THEN
UPDATE SET {clause}
WHEN NOT MATCHED THEN
INSERT {
column} VALUES {clause};
解析
INTO 子句 --用于指定你所update或者Insert目的表。
USING 子句 --用于指定你要update或者Insert的记录的来源,它可能是一个表,视图,子查询。
ON Clause --用于目的表和源表(视图,子查询)的关联,如果匹配(或存在),则更新,否则插入。
merge_update_clause --用于写update语句
merge_insert_clause --用于写insert语句
创建两个表,CUSTOMERS_HIS , CUSTOMERS_NOW
-- 创建测试表 CUSTOMERS_HIS
CREATE TABLE CUSTOMERS_HIS (
customer_id VARCHAR2(20),
customer_name VARCHAR2(50),
deposit NUMBER,
amount NUMBER
);
--插入数据
INSERT INTO CUSTOMERS_HIS VALUES ('KH0001','王一',10000,1000.5);
INSERT INTO CUSTOMERS_HIS VALUES('KH0002','刘二',1030,9405.2);
INSERT INTO CUSTOMERS_HIS VALUES('KH0003','张三',2400,66);
INSERT INTO CUSTOMERS_HIS VALUES('KH0004','李四',65000,65445);
INSERT INTO CUSTOMERS_HIS VALUES('KH0005','王五',600,4324);
INSERT INTO CUSTOMERS_HIS VALUES('KH0006','张六',95200,4123.4);
INSERT INTO CUSTOMERS_HIS VALUES('KH0007','李七',672800,1231.2);
INSERT INTO CUSTOMERS_HIS VALUES('KH0008','李八',10230,13200.5<