Muhammd Aamir Ответов: 0

Как обновить количество записей с помощью цикла 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

у меня нет ни малейшего представления об этом

0 Ответов