Вы можете использовать NVL2
вместо COALESCE
BEGIN
FOR rec IN (SELECT
NVL2 (
(SELECT '123' FROM dual WHERE 1=0) ,
(SELECT '123' || '4' FROM dual), null
)
FROM DUAL
)
LOOP
NULL;
END LOOP;
END;
/
Редактировать Для определения основной причины проблемы
Прежде всего, Coalesce
нужно, чтобы оба аргумента были в одном типе данных. Также типы данных выражений определяются по порядку.
В вашем случае кажется, что ваш первый запрос состоит из трех символов SELECT '123' FROM dual WHERE 1=0)
, а второй - из 4 символов с конкатенацией (здесь конкатенация играет роль: я тоже пытаюсь разобраться с этим). Следовательно, oracle пытается преобразовать тип данных varchar2(4)
(второй оператор) в тип данных varchar2(3)
(первый оператор). Таким образом, ORA-6502 происходит