我正在尝试根据另外两列的值更新表的列。
由于某种原因,我收到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);