Измените вставленное значение с помощью триггера

StackOverflow https://stackoverflow.com//questions/20021644

  •  21-12-2019
  •  | 
  •  

Вопрос

Я только начал изучать SQL несколько недель назад и пытаюсь создать триггер, который изменяет вставленное значение на 10, если оно меньше 10.Я искал уже 4 часа и нашел много ответов, но ни один из них не был хорошим (для меня).Я действительно не понимаю, в чем проблема.Вот код:

CREATE OR REPLACE TRIGGER NumberOfBooks
BEFORE INSERT
ON Book
FOR EACH ROW
BEGIN 
  IF new.nobook < 10
  THEN
    SET new.nobook = 10;
  END IF;
  END;
Это было полезно?

Решение

В синтаксисе триггера Oracle на вновь вставленную запись ссылается :new, не new (обратите внимание на двоеточие).Дополнительно, SET является частью инструкции update, а не способом установки значений полей - это делается с помощью простых присваиваний, но обратите внимание, что это делается с помощью := скорее, чем =.
Итак, ваш триггер должен читать:

CREATE OR REPLACE TRIGGER NumberOfBooks
    BEFORE INSERT
    ON book
    FOR EACH ROW
BEGIN
    IF :new.nobook < 10
    THEN
        :new.nobook := 10;
    END IF;
END;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top