Dronton2
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору 1. Объявляется курсор T_CUR 2. В цикле "FOR X IN T_CUR LOOP" текущая выбранная строка курсора записывается в переменную Х 3. "EXECUTE IMMEDIATE sql_1 USING x.id" выполняет запрос, представленный строкой sql_1. Текущее значение x.id подставляется в параметр запроса (:y). Всю конструкцию можно записать без EXECUTE IMMEDIATE: Код: BEGIN FOR X IN ( select p.id from sm.prod p, sm.drom d where p.date_in > '01-Feb-2017' and p.date_in < '02-Feb-2017' and p.id = d.idprod and p.idstate = 1003) LOOP update sm.drom d set d.idstate = 1, d.procdate = trunc(sysdate) where d.idprod = x.id; commit; END LOOP; END; | COMMIT после каждого UPDATE - нехорошо. В зависимости от количества изменяемых записей, его нужно делать или один раз, или через некоторое количество UPDATEов. Ещё смущают захардкоженые параметры в SELECTе И, возможно, подразумевалось, что p.date_in больше или равно, а не просто больше '01-Feb-2017' А, может быть, всю эту конструкцию можно заменить на единственный UPDATE: Код: update sm.drom set idstate = 1, procdate = trunc(sysdate) where idprod IN (select id from sm.prod where date_in > '01-Feb-2017' and date_in < '02-Feb-2017' and idstate = 1003) |
| Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 09:49 11-10-2017 | Исправлено: Dronton2, 10:19 11-10-2017 |
|