【发布时间】:2015-01-30 05:30:08
【问题描述】:
我正在尝试将 MERGE 用于 UPSERT。此 MERGE 语句的更新代码运行良好(我尚未在此处发布),但 INSERT 给出以下错误:
- ORA-00963 ---缺少表达式(当在 INSERT-VALUES 中提到 SELECT 时)
- ORA-00917 --- 缺少逗号(删除 SELECT 时)
- 当我格式化此代码时,它要求在 VALUES 附近进行语法检查并指向 AS 子句。
基本上,我想编写包含 DECODE 语句的 MERGE-INSERT 语句。 请帮助我,因为我是 Oracle 的新手。
MERGE INTO Table1 t1
USING(SELECT DISTINCT A_cd, F_str, a_pm, a_type
FROM Table2) t2
ON(t1.C_Name=t2.A_cd)
WHEN NOT MATCHED
THEN
INSERT(C_type, C_name, C_value)
VALUES (SELECT t3.C_type, t4.A_cd as C_name,
DECODE(t3.c_type,
'A COMP', t4.f_str,
'A_PM', t4.a_pm,
'A_TYPE' t4.a_type) as c_value)
FROM(SELECT 'A_COMP' as c_type FROM DUAL
UNION ALL
SELECT 'A_PM' as c_type FROM DUAL
UNION ALL
SELECT 'A_TYPE' as c_type FROM DUAL)t3,
(SELECT DISTINCT A_cd, F_str, a_pm, a_type
FROM Table2 t2
WHERE A_cd || F_str || a_pm || a_type
IS NOT NULL
AND NOT EXISTS
(SELECT NULL
FROM Table1 t1
WHERE t2.A_cd=t1.c_name))t4;
【问题讨论】:
-
您可以在答案中检查正确的代码
标签: sql oracle11g merge decode insert-update