在 MERGE 语句中使用 CASE:ORA-00905:缺少关键字
Posted
技术标签:
【中文标题】在 MERGE 语句中使用 CASE:ORA-00905:缺少关键字【英文标题】:Using CASE in MERGE statement : ORA-00905: missing keyword 【发布时间】:2019-08-14 08:55:00 【问题描述】:初始查询:
MERGE INTO TABLE1 t1
USING TABLE2 t2
ON (t1.ID = t2.ID)
WHEN MATCHED
THEN UPDATE SET
t1.PHONE_NUMBER = t2.PHONE_NUMBER;
我需要在此添加另一个 CASE:
CASE WHEN t1.type in ('A','B') then t2.phone_number
else nvl(t2.phone_number,t1.phone_number)
我试图将其合并:
MERGE INTO TABLE1 t1
USING TABLE2 t2
ON (t1.ID = t2.ID)
WHEN MATCHED THEN
CASE WHEN t1.type in ('A','B') THEN UPDATE SET t2.phone_number
ELSE UPDATE SET NVL(t2.phone_number,t1.phone_number)
出现错误:ORA-00905:缺少关键字。
CASE 语句后面可以跟 WHEN...THEN 吗?
【问题讨论】:
【参考方案1】:如下所示
MERGE INTO TABLE1 t1
USING TABLE2 t2
ON (t1.ID = t2.ID)
WHEN MATCHED THEN UPDATE
SET t1.PHONE_NUMBER = CASE
WHEN t1.type in ('A','B') THEN t2.phone_number
ELSE NVL(t2.phone_number, t1.phone_number)
END
【讨论】:
谢谢,@Zaynul 您的查询中缺少更新:当匹配时“更新”设置。同样在添加 UPDATE 之后,仍然得到 ORA-00905: missing keyword : NVL(t2.phone_number,t1.phone_number) ^-- error here -- ORA-00905: missing keyword 只是在case语句的末尾缺少END
。
@gooner_psy 检查已编辑的答案是否缺少结尾以上是关于在 MERGE 语句中使用 CASE:ORA-00905:缺少关键字的主要内容,如果未能解决你的问题,请参考以下文章
如何在 oracle 19c 的 MERGE 语句中使用提交?