我有一个 SQL 查询(如下),我得到一个 ORA-01722: invalid number 错误。很常见。
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 列,我就会得到结果。1 列带有 PARAM_NAME(DISPLAYNAME 列),另一列带有 PARAM_VAL(PARAMTYPE 列)。DECODE 中的所有数据类型都是 Varchar,因此没有从 number 到 char 的转换,反之亦然。这通常是出现此无效数字错误的最常见原因。
如果从上面不清楚,我想做的是在 PARAMTYPE 列上插入一些 if/then 逻辑来更新它。我正在考虑对 PARAMTYPE 变量使用 CASE 语句,但我不确定最好的方法是什么。