Oracle触发器问题

Evil_kiss 2009-11-26 09:41:45
想实现一个触发器,在表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 提取主键
...全文
95 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kanxue660 2009-11-28
  • 打赏
  • 举报
回复
用条件触发器试试,when
ojuju10 2009-11-27
  • 打赏
  • 举报
回复
用程序控制比较容易,不需要建立触发器

BenChiM888 2009-11-27
  • 打赏
  • 举报
回复
重复发帖。。。

已经说过了,建个视图,利用视图的替代触发器(instead of)实现功能。

--给你的LGT_RY_NB表建一个view,利用这个view插入数据,目的是使用instead of触发器。
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;
/
wh62592855 2009-11-27
  • 打赏
  • 举报
回复
请教一下#2和#4
如果不用触发器的话
如何用程序进行控制??
不太了解整个用程序进行控制是什么意思
不用太具体 大概思路说一下就可以了
3Q
baojianjun 2009-11-27
  • 打赏
  • 举报
回复
up
个人建议不要使用触发器了,做个过程在你的操作前做判断和处理
xchuanliu 2009-11-27
  • 打赏
  • 举报
回复
学习
小灰狼W 2009-11-26
  • 打赏
  • 举报
回复
行级AFTER触发器也是可以用到:New的,但是不能执行删除操作。可以新建一个字段flag,然后分别建一个before行级触发器和一个 after表级触发器。行级触发器中插入数据到备份表,且将要删除的记录的FLAG标记为1,在表级触发器里执行删除操作

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧