按大小写更新 table ORA-01722 无效数字

Update table by case ORA-01722 Invalid Number

我正在尝试根据其他两列的值更新 table 的列。

出于某种原因,我收到 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 中的 none 条件得到满足,而你最终评估 else 分支,它将 return 无法转换的字符串 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);