想实现一个触发器,在表LGT_RY_NB插入一条数据前,判断这条数据的SFZH是否like'%111111%' 如果是的话,把这条数据插入到LGT_RY_NB_BackUp表中,然后从LGT_RY_NB中根据ZJHM这个主键删除这条记录(或者禁止执行插入操作),否则的话不做任何操作。就是判断一条数据的SFZH字段是否like 111111 是的话不让其插入数据库
create or replace trigger TRG_ChoseData After INSERT
ON LGT_RY_NB FOR EACH ROW
DECLARE
FOUND BOOLEAN;
BEGIN
IF :New.ZJHM Like '%1111111%'
Then
Delete From LGT_RY_NB Where ZKLSH=:new.zklsh;
Insert Into LGT_RY_NB_BackUp (ZKLSH,XM,SFZH) Values (:new.ZKLSH,:new.XM,:new.SFZH);
END IF;-- ERRORS HANDLING
EXCEPTION
WHEN INTEGRITY_ERROR THEN
RAISE_APPLICATION_ERROR(ERRNO, ERRMSG);
END;我的问题是如果Before INSERT ON LGT_RY_NB FOR EACH ROW 此时执行Delete From LGT_RY_NB Where ZKLSH=:new.zklsh;没有意义,因为这时候还没插入数据,可是如果After INSERT ON LGT_RY_NB FOR EACH ROW 又不能用 ;new 提取主键
create or replace trigger TRG_ChoseData After INSERT
ON LGT_RY_NB FOR EACH ROW
DECLARE
FOUND BOOLEAN;
BEGIN
IF :New.ZJHM Like '%1111111%'
Then
Delete From LGT_RY_NB Where ZKLSH=:new.zklsh;
Insert Into LGT_RY_NB_BackUp (ZKLSH,XM,SFZH) Values (:new.ZKLSH,:new.XM,:new.SFZH);
END IF;-- ERRORS HANDLING
EXCEPTION
WHEN INTEGRITY_ERROR THEN
RAISE_APPLICATION_ERROR(ERRNO, ERRMSG);
END;我的问题是如果Before INSERT ON LGT_RY_NB FOR EACH ROW 此时执行Delete From LGT_RY_NB Where ZKLSH=:new.zklsh;没有意义,因为这时候还没插入数据,可是如果After INSERT ON LGT_RY_NB FOR EACH ROW 又不能用 ;new 提取主键
create or replace view LGT_RY_NB_VIEW
as select * from LGT_RY_NB;--触发器建到这个view上,建一个instead of触发器
create or repace trigger LGT_RY_NB_VIEW_TRIGGER
instead of insert on LGT_RY_NB_VIEW
begin
if :New.ZJHM Like '%1111111%' then
Delete From LGT_RY_NB Where ZKLSH=:new.zklsh;
Insert Into LGT_RY_NB_BackUp (ZKLSH,XM,SFZH)
Values (:new.ZKLSH,:new.XM,:new.SFZH);
else
insert into LGT_RY_NB values(:new.ZKLSH,:new.XM,:new.SFZH);
end if;
end;
/