TRIGGER AFTER INSERT

zhangyong369 2008-12-16 11:14:03
各位大侠帮帮忙
基于表“员工数据表”创建AFTER INSERT触发器EmployeeSalary,将插入员工的工资额限制在5000以内。
和基于表“员工数据表”创建BEFORE INSERT触发器EmployeeSalary,将插入员工的工资额限制在5000以内。
...全文
415 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
taotie1225 2008-12-24
  • 打赏
  • 举报
回复
貌似这里before,after效果都一样伐
yf520gn 2008-12-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zhangyong369 的回复:]
高手给举个例子看看
[/Quote]
GOOGLE才是最好的老师~
zhangyong369 2008-12-24
  • 打赏
  • 举报
回复
高手给举个例子看看
zhangyong369 2008-12-19
  • 打赏
  • 举报
回复
这个我知道
是不是AFTER即使工资超出范围也先插入表中了
轻举一个简单易懂的BEFORE,和AFTER触发器
bzba831123 2008-12-19
  • 打赏
  • 举报
回复
after表示:在表的一行更改后触发执行改触发器.
before表示:在表的一行更改前将要更改的那一刻触发执行触发器.
zhangyong369 2008-12-18
  • 打赏
  • 举报
回复
首先谢谢各位了,各位辛苦了。
create or replace trigger employeesalary
before insert on 员工数据表
when (new.工资<0 or new.工资>5000) for each row
begin
RAISE_APPLICATION_ERROR(-20001,'工资超出范围,操作取消!');
end;

create or replace trigger employeesalary
after insert on 员工数据表
when (new.工资<0 or new.工资>5000) for each row
begin
RAISE_APPLICATION_ERROR(-20001,'工资超出范围,操作取消!');
end;
都创建成功,有啥区别没。
yf520gn 2008-12-17
  • 打赏
  • 举报
回复
有点错


create trigger TR_EmployeeSalary
   before insert or update
   of salary--这是你的工资字段
   on 员工数据表
   referencing old as old_value
   new as new_value
   for each row
   when (new_value.salary>5000 ) --当salary字段的值超过5000时触发
begin
   raise_replaction_err(-2003,'工资超过5000');

end;
yf520gn 2008-12-17
  • 打赏
  • 举报
回复
建议你2个都使用BEFORE.

create trigger TR_EmployeeSalary
   before insert or update
   of salary--这是你的工资字段
   on 员工数据表
   referencing old as old_value
   new as new_value
   for each row
   when (new_value.salary>5000 ) --当salary字段的值超过5000时触发
  begin
   raise_replaction_err(-2003,"工资超过5000");

  end;

watson110 2008-12-17
  • 打赏
  • 举报
回复
触发器的一般写法:
create or replace trigger tg_rl099
after insert or delete on RL_099_YXFS2
for each row
begin
IF Inserting then
insert into RL_099_zyzb(rl_id) values(:New.RL_ID);
commit;
DBMS_output.put_line('插入的汽机副值日志编号为:'||:new.RL_ID);
End If;
If Deleting then
delete from rl_099_zyzb where rl_id = :old.rl_id;
DBMS_output.put_line('删除的汽机副值日志编号为:'||:old.RL_ID);
End If;
Exception
When Others Then
DBMS_output.put_line('出现了意外错误!!');
end;
BlueskyWide 2008-12-17
  • 打赏
  • 举报
回复
1.AFTER INSERT和BEFORE INSERT统一改为update触发;
2.如果emp_salary+:new.add_salary<=5000,执行此触发器中的工资修改语句;
3.如果emp_salary+:new.add_salary>5000,不执行此触发器中的工资修改语句,并作相应处理。



[Quote=引用楼主 zhangyong369 的帖子:]
各位大侠帮帮忙
基于表“员工数据表”创建AFTER INSERT触发器EmployeeSalary,将插入员工的工资额限制在5000以内。
和基于表“员工数据表”创建BEFORE INSERT触发器EmployeeSalary,将插入员工的工资额限制在5000以内。
[/Quote]
Andy__Huang 2008-12-17
  • 打赏
  • 举报
回复
create or replace trigger gg
alter insert on 员工数据表
for each row
declare
begin
if :new.names>5000 then
raise_replaction_err(-2003,"工资超过5000");
else
否则对EmployeeSalary进行更新或插入操作....
end if
end
sjq521521 2008-12-17
  • 打赏
  • 举报
回复
AFTER和BEFORE结果是一样的,不知道LZ到底要干嘛。
yf520gn 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhangyong369 的回复:]
如何插入啊
[/Quote]
你平时怎么插,现在就怎么插,触发器建立好之后,你插入超过5000的值,他就自动触发了~
zhangyong369 2008-12-17
  • 打赏
  • 举报
回复
如何插入啊
hugh_9 2008-12-17
  • 打赏
  • 举报
回复
create trigger TR_EmployeeSalary
   before insert or update
   of salary--这是你的工资字段
   on 员工数据表
   referencing old as old_value
   new as new_value
   for each row
   when (new_value.salary>5000 ) --当salary字段的值超过5000时触发
begin
   raise_replaction_err(-2003,'工资超过5000');

end;

---这个不错。
codearts 2008-12-16
  • 打赏
  • 举报
回复
create trigger tr_x2 
after insert on x
for each row
declare
begin
if :new.sal > 1000 then
raise_application_error(-20001, 'salary cannot exceed 1000');
end if;
end;
codearts 2008-12-16
  • 打赏
  • 举报
回复
create trigger tr_x 
before insert on x
for each row
declare
begin
if :new.sal > 1000 then
raise_application_error(-20001, 'salary cannot exceed 1000');
end if;
end;
you_tube 2008-12-16
  • 打赏
  • 举报
回复
用select 控制一下就行了
比如:insert into Table values(xx,xxx) select xx,xxx from TableB where salary < 50000

17,137

社区成员

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

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