#sql #oracle #triggers #insert
#sql #Oracle #триггеры #вставить
Вопрос:
Эй, ребята, я пытаюсь создать триггер для обновления счета за фейлд.BillAmmount каждый раз, когда добавляется новая строка для чтения, поле должно = (Чтение.СЧИТЫВАНИЕ — чтение.LastMeterReading) * Повторно.Скорость)
ПОВТОРНОЕ ЧТЕНИЕ ЗАКОНОПРОЕКТА
являются ли таблицы 3 также ооочень благодарными
AFTER INSERT ON Reading
Begin
UPDATE bill
SET bill.BillAmount = (SELECT (Reading.MeterReading - Reading.LastMeterReading)*Resedent.Rate
FROM Reading, Resedent
WHERE Reading.ReadingID = ReadingID AND Resedent.AccountID = AccountID)
End;
DROP TRIGGER BILLAMOUNT_ON_INSERT; ```
Комментарии:
1. Обычно ошибочно хранить то, что можно вычислить . Все, что вы делаете, сохраняя его, — это создаете возможность для его непоследовательности.
2. Пожалуйста, пометьте свой вопрос базой данных, которую вы используете. Это SQL Server?
3. Он использует Oracle SQL
4. @Damien_The_Unbeliever как бы вы это сделали?
Ответ №1:
В Oracle триггер должен ссылаться на :NEW
(или, возможно :OLD
). Кроме того, Oracle не поддерживает FROM
UPDATE
инструкции in .
Я подозреваю, что вы хотите что-то вроде этого:
Begin
UPDATE bill b
SET BillAmount = (SELECT (:new.MeterReading - :new.LastMeterReading) * rs.Rate
FROM Resedent rs
WHERE rs.ReadingID = :new.AccountID
)
WHERE b.AccountId = :new.AccountId
End;
Однако без дополнительной информации о вашей модели данных трудно точно определить, что вы действительно хотите сделать.