ora-01722:数字无效,但删除decode语句将返回结果

j13ufse2  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(351)

我有一个sql查询(如下),其中我得到一个ora-01722:无效数字错误。很普通。

SELECT pt.DISPLAYNAME PARAM_NAME,
  DECODE(rp.PARAMTYPE, 'POVLOC', l.PARTNAME, p.PARAM_VALUE) PARAM_VALUE
FROM schema2.OTHER_PARAMS p
JOIN schema2.TPARAMETER rp
  ON rp.R_ID = 10230
 AND p.PARAM_NAME = rp.PARAMNAME
JOIN schema2.TPARAMETER_TL pt
  ON rp.PARAMID = pt.PARAMID
 AND pt.LANGUAGE = 'en'
LEFT JOIN schema2.TPARTITION l
  ON l.PARTITION = p.PARAM_VALUE
WHERE p.F_ID = 3669
ORDER BY rp.SEQ

一旦我删除了decode语句,只得到paramtype列,我就会得到结果。一列带有param_name(displayname列),另一列带有param_val(paramtype列)。解码中的所有数据类型都是varchar,因此没有从number到char的转换,反之亦然。这通常是发生无效数字错误的最常见原因。
如果上面不清楚,我想做的是在paramtype列中插入一些if/then逻辑来更新它。我在考虑对paramtype变量使用case语句,但我不确定最好的方法是什么。

eanckbw9

eanckbw91#

如果解码结果值同时具有number和varchar,那么应该强制第一个值为varchar,以避免转换错误。在您的情况下,只需将l.partname替换为to_char(l.partname)。

相关问题