sql – 更新与CASE和IN – Oracle

我写了一个在SQL Server中的魅力的查询。不幸的是,它需要在Oracle数据库上运行。我一直在搜索内部的一个解决方案如何转换它,没有任何成功:

查询看起来像这样我SQL:

UPDATE tab1   SET budgpost_gr1=     
CASE  WHEN (budgpost in (1001,1012,50055))  THEN 'BP_GR_A'   
      WHEN (budgpost in (5,10,98,0))  THEN 'BP_GR_B'  
      WHEN (budgpost in (11,876,7976,67465))     
      ELSE 'Missing' END`

我的问题是,列budgetpost_gr1和budgetpost是字母数字,Oracle似乎希望将列表看作数字。列表是预定义为逗号分隔列表的变量/参数,只是将其转储到查询中。

你说,预算号是字母数字。这意味着它正在寻找与字符串的比较。您应该尝试将参数包含在单引号中(并且您在Case表达式中缺少最终的THEN)。

UPDATE tab1   
SET budgpost_gr1=   CASE  
                        WHEN (budgpost in ('1001','1012','50055'))  THEN 'BP_GR_A'   
                        WHEN (budgpost in ('5','10','98','0'))  THEN 'BP_GR_B'  
                        WHEN (budgpost in ('11','876','7976','67465')) THEN 'What?'
                        ELSE 'Missing' 
                        END 
翻译自:https://stackoverflow.com/questions/5170864/update-with-case-and-in-oracle

转载注明原文:sql – 更新与CASE和IN – Oracle