oracle 写一个触发器,新手
after insert on T_caigoudan
for each row
begin
if to_date(cgdate ,'mm-dd') = to_date('04-23','mm-dd') then
if totalprice >= 888 then
sale = 0.5;
realcost = sale * totalprice;
else
sale = 0.7;
realcost = sale * totalprice;
end if;
else
sale = 1;
realcost = sale * totalprice;
end if;
end;
目的是当向订购单中插入数据时,先判断时间是否是4月23日,插入的数据是年月日格式的,然后判断总金额是否大于888,如果是打5折,如果不是打7折,将折扣存入sale,将最后实际价格存入realcost,我这样写有很多错误,希望大神帮忙改下,最好加点解释
补充下,采购日期,总金额,折扣,最后价格这几个字段在一张表里 展开
2017-04-13 · 知道合伙人互联网行家
创建两个表:
create table a
(stdid int,
stdname varchar2(10));
create table b
(stdid int,
stdname varchar2(10));
创建触发器:
CREATE OR REPLACE TRIGGER tr_insert
after insert
ON a
FOR EACH ROW
BEGIN
INSERT INTO b(stdid,stdname)
VALUES(:new.stdid,:new.stdname);
END;
验证,在a表中插入数据:
insert into a values (1,'a');
commit;
验证b表结果:
如果业务需要在插入前作判断
就是说 当且仅当 表A插入的 stdid在表C中存在 也就是说
表A新插入的的 stdid in select stdid from C 时 才执行下面插入表B的动作
创建个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的数据,剩下的自己验证吧, 不给你截图了