求一个简单的oracle 触发器 写法
业务很简单要求:当表A(stdid,stdname)插入一行之后,将插入的这行的stdid和stdname这俩字段的值插入到表B(sid,sname)这俩字段怎么实现...
业务很简单 要求:
当表A (stdid,stdname) 插入一行之后,将插入的这行的 stdid 和 stdname 这俩字段的值
插入 到表B (sid,sname) 这俩字段 怎么实现 展开
当表A (stdid,stdname) 插入一行之后,将插入的这行的 stdid 和 stdname 这俩字段的值
插入 到表B (sid,sname) 这俩字段 怎么实现 展开
2个回答
展开全部
追问
谢谢大神 如果业务需要在插入前作判断
就是说 当且仅当 表A插入的 stdid在表C中存在 也就是说
表A新插入的的 stdid in select stdid from C 时 才执行下面插入表B的动作 这个if判断要怎么写
追答
创建个c表
create table c
(stdid int);
插入一条数据:
insert into c values (1);
commit;
触发器修改为:
CREATE OR REPLACE TRIGGER tr_insert
after insert
ON a
FOR EACH ROW
declare v_count int;
BEGIN
select count(*) into v_count from c where stdid =:new.stdid;
if v_count=0
then
INSERT INTO b(stdid,stdname)
VALUES(:new.stdid,:new.stdname);
end if;
END;
然后分别往a表中插入id=1和id=2的数据,剩下的自己验证吧, 不给你截图了
2016-08-19
展开全部
CREATE OR REPLACE TRIGGER TRG_A_B
after insert on a
for each row
declare
sid varchar2(200)
sname varchar2(200)
begin
:new.stdid := sid;
:new.stdname := sname ;
insert into b(sid,sname) values(sid,sname);
end TRIGGER TRG_A_B ;
after insert on a
for each row
declare
sid varchar2(200)
sname varchar2(200)
begin
:new.stdid := sid;
:new.stdname := sname ;
insert into b(sid,sname) values(sid,sname);
end TRIGGER TRG_A_B ;
追问
是 :new.stdid := sid; ?
还是 sid =:new.stdid;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询