Вместо того, чтобы обрабатывать это требование в PL / SQL, вы должны рассмотреть возможность сделать это в самом курсоре. В общем, чем больше вы можете сделать в своем SQL, тем лучше (оптимизатор будет обрабатывать производительность). Использование большого количества логики PL / SQL, особенно ненужного, если условия / else в цикле принесут пользу вам, если вы обрабатываете много данных.
В вашем курсоре вы можете просто:
CURSOR c1 IS
SELECT NVL(column, 'NULL')
FROM dual;
Существует множество встроенных функций SQL, которые справятся с этим за вас. Выше я использовал NVL, но вы можете использовать COALESCE, CASE и т. Д.
Пример CASE (примечание - если столбец не является типом данных VARCHAR, вам потребуется применить преобразование типов данных, чтобы избежать ошибок):
CURSOR c1 IS
SELECT (CASE
WHEN column IS NULL THEN
'NULL'
ELSE
column
END)
FROM dual;
Пример COALESCE:
CURSOR c1 IS
SELECT COALESCE(column, 'NULL')
FROM dual;
Стоит отметить, что NVL - это двоичная функция, то есть может быть протестирован только один столбец / значение, однако COALESCE может тестировать несколько столбцов / значений одновременно, как показано ниже:
SELECT COALESCE (столбец1, столбец2, столбец3, «NULL»)
FROM YOUR_TABLE;
В случае если значение column1 равно NULL, а column2 НЕ равно NULL, будет возвращено значение column2.
Если значения column1 и column2 равны NULL, будет возвращено значение column3.
Если column1, column2, column3 имеют значение NULL, возвращается значение NULL.