У меня есть 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, я получаю результаты. 1 столбец с PARAM_NAME (столбец DISPLAYNAME), другой с PARAM_VAL (столбец PARAMTYPE). Все типы данных в DECODE — это Varchar, поэтому преобразование числа в char или наоборот невозможно. Обычно это самая распространенная причина возникновения этой ошибки с недопустимым номером.
Если это неясно из вышеизложенного, я хочу вставить некоторую логику if/then в столбец PARAMTYPE, чтобы обновить его. Я думал об использовании оператора CASE для переменной PARAMTYPE, но я не уверен, как лучше всего это сделать.
CAST
paramtype в виде строки (to_char или иначе). Это проблема преобразования типов. - person alexherm   schedule 22.05.2020DECODE( TO_CHAR(rp.PARAMTYPE, 'POVLOC'), l.PARTNAME, p.PARAM_VALUE) PARAM_VALUE
- person krokodilko   schedule 22.05.2020