ОБНОВЛЕНИЕ ТРИГГЕР? - PullRequest
       9

ОБНОВЛЕНИЕ ТРИГГЕР?

2 голосов
/ 16 января 2012

Я пытаюсь выполнить триггер e, он выполняется, но он не выполняет то, что я хочу.

ок, это две таблицы, которые мне нужны для этого

create table Properties(  
        idProperties number(20) NOT NULL,
        Typee varchar2(20) NOT NULL,
        SquareMeters varchar2(20) NOT NULL,
        Rooms number(20) NOT NULL,
        ConstructionDate date NOT NULL,
        FloorLocation varchar(20),
        Price number(20) NOT NULL,
        CityView varchar2(20),
        DateOfInsert date NOT NULL,
        DateOfExiration date NOT NULL,
        Address_FK number(20),
        Service_FK number(20),
        OwnerAgent_FK number(20),
        Status_FK number(20),
        PropertyService_FK number(20))

create table Status(
         idStatus number(20) NOT NULL,
         statustype varchar2(20))

этоэто триггер

CREATE OR REPLACE TRIGGER Property_Update 

AFTER UPDATE ON Properties REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW 


BEGIN
DECLARE
val_new VARCHAR2(20);
val_app VARCHAR2(20);
BEGIN
    select idstatus into val_new from status where STATUSTYPE='New';
    select idstatus into val_app from status where STATUSTYPE='Approved';        

IF :OLD.status_fk=val_new AND :NEW.status_fk=val_app THEN
   UPDATE Properties SET DateOfExiration=(sysdate+90) WHERE  
idProperties= :NEW.idProperties;


END IF; 


END;
END;

Я хочу обновить sysdate + 90, когда statustype изменяется с «нового» на «одобренный»

Я обновляю его

update properties set status_fk = 2 where idproperties = 12;

он изменяет forieng ключ status_fk в свойствах таблицы, но не обновляет дату истечения срока до sysdate + 90?

есть идеи, почему это происходит?

1 Ответ

7 голосов
/ 16 января 2012

Это необходимо сделать с помощью ДО ОБНОВЛЕНИЕ триггера, и вам нужен код:

IF :OLD.status_fk=val_new AND :NEW.status_fk=val_app THEN
   :NEW.DateOfExiration  := (sysdate+90);
END IF;

т.е. вы присваиваете значение в триггере, вы не делаете еще одно ОБНОВЛЕНИЕ.

Это должен быть триггер ДО, потому что вы не можете изменять значения в триггере ПОСЛЕ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...