Удалите обработчики ИСКЛЮЧЕНИЯ, и вы узнаете, в чем на самом деле ошибка.Вы не должны явно обрабатывать непредвиденные исключения.
Было бы также лучше использовать переменные связывания, например, измените это:
|| 'substr(ta_xxxx_id,1,7) = ''sssssss'' '
|| 'and substr(ta_xxxx_id,instr(ta_xxxx_id,''*'',1,2)+1) = ''aaaa'' '
на
|| 'substr(ta_xxxx_id,1,7) = :sssssss '
|| 'and substr(ta_xxxx_id,instr(ta_xxxx_id,''*'',1,2)+1) = :aaaa '
, затем добавьте USINGпредложение оператора OPEN:
OPEN CUR_faawards FOR thequery USING id, v_year;
и удалите код REPLACE для них.Боюсь, вы застряли с «хххх» из-за ужасного дизайна таблицы - колонки на каждый год?!?!