按大小写更新表 ORA-01722 无效号码



我正在尝试根据另外两列的值更新表的列。

由于某种原因,我收到ORA-01722:无效号码

UPDATE TableT SET 
   Col = (CASE when PER in ('1234','2134','2314','3214') AND TYPE = 4 then '4' 
                     when PER in ('34','104','1004') AND TYPE = 4 then '35' 
                     when PER in ('124','1204','2014') AND TYPE = 4  then '36'
               ELSE 'Missing'  
END);

此语句在 ORA-01722 中失败的唯一方法是Col是数字列。 '4''35''36'可以自动转换为数字。但是,如果case条件都不满足,并且您最终计算了else分支,它将返回无法转换为数字的字符串Missing

处理它的一种方法可能是使用 null ,它旨在表示缺失值:

UPDATE TableT SET 
   Col = (CASE when PER in ('1234','2134','2314','3214') AND TYPE = 4 then 4 
                     when PER in ('34','104','1004') AND TYPE = 4 then 35 
                     when PER in ('124','1204','2014') AND TYPE = 4  then 36
               ELSE NULL  
          END);

最新更新