Ill*_*cum 2 sql oracle triggers
我试图执行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))
Run Code Online (Sandbox Code Playgroud)
这是触发器
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;
Run Code Online (Sandbox Code Playgroud)
当statustype从'new'更改为'approved'时,我想更新sysdate + 90
我正在更新它
update properties set status_fk = 2 where idproperties = 12;
Run Code Online (Sandbox Code Playgroud)
它更改了表属性上的forieng键status_fk,但它没有更新到sysdate + 90的到期日期?
知道为什么会这样吗?
您需要在BEFORE UPDATE触发器中执行此操作,并且您需要的代码是:
IF :OLD.status_fk=val_new AND :NEW.status_fk=val_app THEN
:NEW.DateOfExiration := (sysdate+90);
END IF;
Run Code Online (Sandbox Code Playgroud)
即你在触发器中分配值,你不做另一个UPDATE.
它必须是BEFORE触发器,因为您无法修改AFTER触发器中的值.
归档时间: |
|
查看次数: |
395 次 |
最近记录: |