Как написать этот анонимный блок? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь использовать анонимный блок для двойного обновления, но он не работает для меня. Что я делаю не так?

DECLARE  
   v_voucher NUMBER(10) := 4329;
BEGIN

   UPDATE PRODUCTION 
   SET 
     UND_PROD = 0,
     UND_DET = 0
   WHERE 
     VOUCHER = v_voucher;
 
   UPDATE DET_PRODUCTION 
   SET 
     UND_GOOD = 0,
     UND_BAD = 0
   WHERE 
     VOUCHER = v_voucher;
 
END;

ORA-06550: строка 9, столбец 1: PLS-00103: Обнаружен символ "" при ожидании одного из следующих действий:

(начинайте регистр, объявляйте завершение исключения конца для goto if mod цикла null Pragma Повышение Возврат Выберите Обновление в то время как с [идентификатор] [разделенный двойными кавычками идентификатор] [переменная связывания] продолжить закрытие текущей блокировки выборки извлечения вставить открытый набор точек отката отката набор SQL выполнить коммит слива труб продувка

1 Ответ

4 голосов
/ 16 апреля 2019

Нет ничего плохого в вашем коде как таковом, но у вас, кажется, есть скрытый символ, который вызывает проблему.

Если я скопирую код из окна редактирования и выведу то, что там естьстрока перед вторым обновлением имеет 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, и в нее были добавлены специальные символы, как обычно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...