PL / SQL Выполнить промежуточный запрос на обновление, давая SQLCODE -932 - PullRequest
0 голосов
/ 24 марта 2020

Я заканчиваю блок PL / SQL, но последнее заявление об обновлении вызывает у меня головную боль.

Следующий EXECUTE INMEDIATE дает мне SQLCODE -932 и программные прерывания.

EXECUTE IMMEDIATE 'UPDATE RS2QTCIN cin SET cin.date_end = '|| dateINSERT ||' WHERE cin.id = '|| REG1.c1id;

Запрос просто прост, dateINSERT - это переменная, определенная в блоке объявления и значение в конце ( REG1.c1id ), является также результатом определения курсора.

Запрос на обновление кажется корректным, а переменные объединяются со строкой запроса.

1 Ответ

1 голос
/ 24 марта 2020

Не объединяйте параметры в строку SQL, используйте вместо них заполнители:

EXECUTE IMMEDIATE 'UPDATE RS2QTCIN cin SET cin.date_end = :1 WHERE cin.id = :2'
  USING dateINSERT, REG1.c1id;

Но так как в вашем SQL нет идентификаторов динамических c, вам не нужны динамические c SQL для начала:

UPDATE RS2QTCIN cin 
    SET cin.date_end = dateINSERT 
WHERE cin.id = REG1.c1id;
...