ТРИГГЕР SQL ПРИ ОБНОВЛЕНИИ

#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;
  

Однако без дополнительной информации о вашей модели данных трудно точно определить, что вы действительно хотите сделать.