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

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

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

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

IT-новости

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

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

подробнее

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

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

подробнее

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

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

подробнее

--заносим, если что-то осталось, на склад

           update warehouse set count =

count + rscount - NEW.count

                 where goods_id = NEW.goods_id;

    else

--зарезервировать не удалось – заносим соответствующие пометки

           update orders set status = 'not reserved'

                 where order_id = NEW.order_id;

           insert into orders_warnings(order_id,

message, date)

                 values(NEW.order_id,

'Товар по заказу не зарезервирован', now());

    end if;

else

--уменьшаем количество на складе

    update warehouse set count = count - NEW.count

           where goods_id = NEW.goods_id;

--делаем запись в таблице резерва

    insert into reserved(order_id, goods_id, count, date)

           values(NEW.order_id, NEW.goods_id, NEW.count

NEW.date);

end if;

return NEW;

END;

Обратите внимание на применение нами переменной reserved%rowtype – она описывает запись таблицы reserved, которую мы в дальнейшем используем для организации цикла (конструкция «for row in select ... loop») по записям, выбранным из этой таблицы. С тем же успехом можно было бы использовать переменную типа RECORD, однако из-за меньшей скорости обработки этот тип рекомендуется задействовать только там, где переменная будет применяться при обработке нескольких таблиц или невозможно указать конкретную таблицу.

Аналогично переменная whcount описана с тем же типом, что и поле count таблицы warehouse. Конкретно в данном примере это сделано исключительно в целях демонстрации такой возможности. Но в реальных проектах типы некоторых полей в базе могут меняться по тем или иным соображениям (например, поле типа char, хранящее IP-адреса машин, может быть в будущем изменено на специальный тип inet), и использование привязки типа переменных к типу поля позволит избежать внесения правок во все разработанные функции.

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

create trigger set_order after insert on orders


Предыдущая страницаОглавлениеСледующая страница
 
[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