Как обновить количество записей с помощью цикла for в oracle / pl SQL
Привет, Профессионалы
надеюсь, что все Вы хороши.
я новичок в oracle и PL SQL, я хочу обновить полученный товар на складе в предыдущую дату с помощью цикла for. я хочу, чтобы при нажатии кнопки он обновлял запись данной даты и идентификатор конкретного продукта, а также обновлял записи в следующей дате до максимальной даты в таблице. пожалуйста,проверьте приведенный ниже код при нажатии кнопки триггера. все работает нормально, но оператор update ничего не делает.
пожалуйста, помогите мне выбраться из этой тупиковой ситуации.
Что я уже пробовал:
DECLARE DATE_DIF NUMBER; MAX_DAT DATE; BEGIN SELECT MAX(DATED) INTO MAX_DAT FROM STOCK; DATE_DIF := MAX_DAT - :TEXT_TOP_DATED; FOR CNT IN 1..DATE_DIF LOOP SELECT OPENING, RECIEVED , CONSUME, CLOSING,DATED INTO :OPENING, :RECIEVED, :CONSUME, :CLOSING, :DATED FROM STOCK WHERE DATED = :TEXT_TOP_DATED + 1 AND PRODUCT_ID = :LOV_PNAME; :CLOSING := ( :OPENING + :RECIEVED ) - :CONSUME; UPDATE STOCK SET RECIEVED = :RECIEVED, CONSUME = :CONSUME , CLOSING = :CLOSING WHERE DATED = :TEXT_TOP_DATED AND PRODUCT_ID = :LOV_PNAME; :TEXT_TOP_DATED := :TEXT_TOP_DATED + 1; END LOOP; END;
CHill60
Мой совет состоял бы в том, чтобы не использовать цикл любого описания. Oracle основана на множествах. Использовать join и Where, чтобы достичь того, чего вы хотите.
Muhammd Aamir
пожалуйста, покажите мне какой-нибудь код, чтобы я мог решить свою проблему.
CHill60
Я написал статью о том, как избежать петель - Циклы обработки в SQL Server[^].
Он написан с использованием SQL Server, но большинство принципов применимы к любому языку T-SQL, включая Oracle, но вам придется искать конкретную документацию.
Muhammd Aamir
@chill60 Спасибо, что пришли за помощью. я попробую это сделать. давай посмотрим
Muhammd Aamir
у меня нет ни малейшего представления об этом