Нет ничего плохого в вашем коде как таковом, но у вас, кажется, есть скрытый символ, который вызывает проблему.
Если я скопирую код из окна редактирования и выведу то, что там естьстрока перед вторым обновлением имеет C2A0
.
select dump (' WHERE VOUCHER = v_voucher;
UPDATE DET_PRODUCTION SET
', 1016) from dual;
DUMP('WHEREVOUCHER=V_VOUCHER; UPDATEDET_PRODUCTIONSET',1016)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Typ=96 Len=60 CharacterSet=AL32UTF8: 9,57,48,45,52,45,20,56,4f,55,43,48,45,52,20,3d,20,76,5f,76,6f,75,63,68,65,72,3b,a,9,c2,a0,a,9,55,50,44,41,54,45,20,44,45,54,5f,50,52,4f,44,55,43,54,49,4f,4e,20,53,45,54,20,a
^^^^^
Самый простой способ исправить это, вероятно, выделить весь текст из точки с запятой после первого обновления, непосредственно перед вторым обновлением и удалитьэто - заменив его новой строкой или двумя.
Или скопируйте отрисованный блок из вашего вопроса и запустите его - мошеннический символ не является проблемой, если исходный код (который вы можете увидеть только при редактировании)был обработан как Markdown.
Не уверен, откуда это взялось;возможно, вы написали это во внешней программе, такой как Word, и в нее были добавлены специальные символы, как обычно ...