在 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:缺少关键字的主要内容,如果未能解决你的问题,请参考以下文章

将 MERGE 语句的更新列审计为不同表中的行

Oracle SQL中的Merge用法

如何在 oracle 19c 的 MERGE 语句中使用提交?

在 oracle 的另一个 case 语句中使用 case 语句的结果

在 ORACLE 中使用 MERGE 语句删除和插入

在 case 语句中使用枚举仅使用 Case 1 (Visual Basic)