Можно ли создать триггер, который обновляет определенные строки на основе определенных условий? - PullRequest
0 голосов
/ 16 марта 2011

Таблицы:

  • Сотрудник
  • Заказы
  • Клиент

Сотрудник может принимать заказы от 0 или более клиентов, иклиент может разместить 1 или несколько заказов.В этом смысле Orders является мостом между Employee и Customer и содержит Employee_no и Customer_no в качестве FK.

Я хотел бы создать триггер, который после добавления новой записи клиента в таблицу клиентов обновляет таблицу заказов следующим образом:

  • Первые пять клиентов назначены наEmployee_no 1, например.
  • Вторые пять клиентов назначены Employee_no 2, например.

... и так далее до последнего Employee_no (скажем, например, 10)

А затем еще пять клиентов назначаются на Employee_no 1, опять же.

Итак, все идет по кругу, и сотрудники по очереди обрабатывают клиентов.

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Я бы использовал триггер в таблице заказов, который определяет сотрудника с наименьшим количеством клиентов. Это избавляет вас от необходимости переоценивать все существующие заказы.

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;
1 голос
/ 16 марта 2011

Звучит так, будто вам нужен триггер на таблице заказов, а не на таблице клиентов. Возможно, что-то подобное будет работать?

  • Напишите запрос, чтобы получить количество полных кратных пяти заказов, которые сотрудники имеют в таблице заказов.

  • Используйте этот запрос, чтобы написать функцию, возвращающую идентификатор сотрудника для сотрудника, который следующий по очереди получает присвоенный заказ. Проверьте функцию, чтобы убедиться, что она, кажется, делает то, что вы хотите.

  • Запишите триггер при вставке, используя функцию для установки значения employee_id в таблице заказов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...