PLSQL: NEW и: OLD
Может ли кто-нибудь заставить меня понять, когда использовать :NEW
и :OLD
в блоке PLSQL, мне очень сложно понять их использование.
Ответы
Ответ 1
Обычно вы используете термины в trigger, используя :old
для ссылки на старое значение и :new
для ссылки на новое значение.
Вот пример из документации Oracle, связанной с выше
CREATE OR REPLACE TRIGGER Print_salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab
FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE
sal_diff number;
BEGIN
sal_diff := :new.sal - :old.sal;
dbms_output.put('Old salary: ' || :old.sal);
dbms_output.put(' New salary: ' || :new.sal);
dbms_output.put_line(' Difference ' || sal_diff);
END;
В этом примере триггер срабатывает BEFORE DELETE OR INSERT OR UPDATE
:old.sal
будет содержать зарплату до запуска триггера, а :new.sal
будет содержать новое значение.
Ответ 2
: Новое и: значение Old можно дифференцировать в заявлениях DML.
Вставить - : Старый= NULL : Новый= Введенное новое значение
Обновить - : Старый= Значение, присутствующее в таблице перед оператором Update Triggered : New= С учетом нового значения Update
Удалить - : Старый= Значение перед удалением : Новый= NULL
Ответ 3
: old и: new - псевдослужбы, относящиеся к данным уровня строки доступа при использовании триггера уровня.
- : old - относится к старой ценности
- : new - относится к новому значению
Для операции "Ниже" соответствующие старые и новые значения:
- INSERT -: old.value = NULL,: new value = post insert value
- DELETE -: old.value = Pre Удалить значение: новое value = null
- UPDATE -: old.value = значение для предварительного обновления, новое value = сообщение обновления
Значение
Например:
CREATE OR REPLACE TRIGGER get_dept
BEFORE DELETE OR INSERT OR UPDATE ON employees
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT('Old Dept= ' || :OLD.dept|| ', ');
DBMS_OUTPUT.PUT('New Dept= ' || :NEW.dept );
END;
Заявление о запуске:
UPDATE employees
SET dept ='Accounts'
WHERE empno IN (101 ,105);
Ответ 4
: new означает новое значение, которое вы пытаетесь вставить
: old означает существующее значение в базе данных
Ответ 5
: old - это старое значение
: новое ваше новое значение,
он используется много в триггерах, например, с полями Creation_Date и Modified_By
Ответ 6
: new - новое значение. После запуска триггера это значение столбца
: old - старое значение. После запуска триггера это значение заменяется на : новое значение