2017-01-05 4 views
-2

Я пытаюсь создать триггер, если одно поле в моей базе данных равно null, а затем автоматически обновляет другое значение, равное нулю. Это то, что я пробовал:Создание триггера, где, если одно поле равно null другому, равно

CREATE TRIGGER t123 
BEFORE INSERT ON Customer 
    REFERENCING NEW ROW AS New 
FOR EACH ROW 
    BEGIN 
IF new.f is null 
THEN  
    new.course_year = null; 
END IF; 
END; 
+4

А в чем проблема? у вас ошибка, неправильное поведение, ...? – Aleksej

+0

'new' является зарезервированным словом, поэтому попробуйте использовать другое имя, например:' REFERENCING NEW ROW AS New_row'. –

+0

Или просто используйте соответствующий синтаксис как [указанный в документации] (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/triggers.htm#LNPLS99955) – APC

ответ

3

Вам не нужно REFERENCING, вы можете просто использовать :NEW. Кроме того, вне пункта WHEN, вы должны использовать :NEW и не NEW:

SQL> create table customer (f varchar2(100), course_year varchar2(100)); 

Table created. 

SQL> CREATE TRIGGER t123 
    2  BEFORE INSERT OR UPDATE 
    3  ON Customer 
    4  FOR EACH ROW 
    5 BEGIN 
    6  IF :new.f is null 
    7  THEN 
    8   :new.course_year := null; 
    9  END IF; 
10 END; 
11/

Trigger created. 

SQL> insert into Customer(f, course_year) values (123, 123); 

1 row created. 

SQL> update customer set f = null, course_year = 'test'; 

1 row updated. 
SQL> select * from customer; 

F   COURSE_YEA 
---------- ---------- 


SQL> 
+0

Я изменил INSERT на UPDATE и то обновление в моем браузере объектов, что было надеялось, это то, что если бы я ввел null в поле f и «test» в поле course_year. Поле года курса будет обновлено до нуля. Но значение «теста», кажется, остается, даже если триггер был создан успешно? – Thegarn

+0

Совершенно невозможно. Просто показал пример – Aleksej

+0

спасибо! Я думаю, что я запутался, оставив поле пустым и введя слово null в поле :) – Thegarn

Смежные вопросы