Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

    execute procedure orders_after_insert();

Точно так же поступим с триггером для контроля обязательных остатков (здесь все заметно проще):

Create or replace function warehouse_after_update()

returns trigger as

'BEGIN

if NEW.count < (select rest from goods

                 where goods_id = NEW.goods_id) then

 

    insert into goods_warnings(goods_id, message, date)

           values(NEW.goods_id,

                 'Остаток меньше обязательного',

                 now());

end if;

return NEW;

END;'

language 'plpgsql';

 

Create trigger rest_control after update on warehouse

    execute procedure warehouse_after_update();

На что здесь можно обратить внимание, так это на непосредственное использование результата выборки в качестве переменной (см. конструкцию «select» в скобках). Естественно, выборка должна возвращать одно значение требуемого типа. Ну и поскольку благодаря этому в функции удалось обойтись без переменных, секцию DECLARE за ненадобностью можно опустить.

И теперь приступаем к проверке работоспособности. Сначала оформим «штатный» заказ:

insert into orders(customer, goods_id, count, price, date)

    values('Иванов Иван Иванович', 3, 1, 7302.00, '2004-07-15');

Убеждаемся, что на складе количество мониторов уменьшилось, записи в таблицах заказов и резерва появились, предупреждений нет. Теперь закажем сразу 4 монитора:

insert into orders(customer, goods_id, count, price, date)

    values('Горэлектросети', 3, 4, 7302.00, '2004-07-16');

Чтобы проверить правильность отмены просроченных заказов, даты выше были указаны прошедшие. Если сейчас заказать 10 мониторов, то заказ будет помечен как «not reserved», и соответствующая запись появится в таблице предупреждений. Поскольку даже с учетом просроченных заказов 10 мониторов никак не набирается, то и аннулироваться ничего не будет. А вот если заказать 3 монитора, то с учетом высвобождения просроченного резерва (5 штук) нужное количество набирается и даже 2 монитора будут возвращены на склад. В таблице предупреждений появится 4 записи – две об аннулировании просроченных заказов, одна о том, что имела место нехватка товара на складе, и одна о том, что остаток мониторов (4 шт.) меньше обязательного минимума (5 шт.).


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100