0

我有一个 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 语句,但我不确定最好的方法是什么。

4

1 回答 1

1

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

于 2021-04-07T15:51:43.337 回答