是否可以根据特定条件创建更新某些行的触发器?

时间:2011-03-15 22:03:58

标签: sql oracle triggers

表格:

  • 员工
  • 订单
  • 客户

员工可以接受0或更多客户的订单,客户可以下1个或多个订单。从这个意义上讲,Orders是Employee和Customer之间的桥梁,包含Employee_no和Customer_no作为FK。

我想创建一个触发器,在将新客户记录添加到Customer表后,按以下方式更新Orders表:

  • 例如,前五个客户被分配到Employee_no 1。
  • 例如,第二个五个客户被分配到Employee_no 2。

......等到最后一个Employee_no(例如10)

然后再将另外五个客户分配给Employee_no 1。

因此,它是循环的,员工轮流处理客户。

2 个答案:

答案 0 :(得分:1)

听起来你想在Order表上触发一个触发器,而不是Customer表。也许这样的事情会起作用吗?

  • 编写一个查询,以获取员工在订单表中拥有的5个订单的完整倍数。

  • 使用此查询编写一个函数,返回员工的员工ID,然后依次为该员工分配订单。测试功能以确保它看起来像你想要的那样。

  • 使用在Orders表中设置employee_id的函数在insert上写一个触发器。

答案 1 :(得分:1)

我在订单表上使用触发器来确定客户最少的员工。这可以防止您不得不重新评估所有现有订单。

create or replace trigger trigger_orders
before insert on orders
for each row
begin
  if :new.employee_no is null
  then
    ... determine employee with least orders and assign this no to :new.employee_no ...
  end if;
end;