oracle 写一个触发器,新手

createorreplacetriggerjsafterinsertonT_caigoudanforeachrowbeginifto_date(cgdate,'mm-d... create or replace trigger js
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 · 知道合伙人互联网行家
龙氏风采
知道合伙人互联网行家
采纳数:5849 获赞数:12817
从事互联网运营推广,5年以上互联网运营推广经验,丰富的实战经

向TA提问 私信TA
展开全部

创建两个表:

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的数据,剩下的自己验证吧, 不给你截图了

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式