Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 05.03.2016
Сообщений: 49

Триггер

16.05.2017, 01:12. Показов 1486. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть таблица, содержащая информацию об услугах автосервиса.

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

Нужно создать триггер, который при изменении стоимости работы для отечественного автомобиля, изменяет на такое же количество процентов стоимость для иностранного.

Следующий код я писал в ночи, уже плохо соображал, поэтому я уверен, что мой способ далеко не самый простой, надеюсь Вы знаете более простой путь)

Здесь я попытался найти разницу(raz) в стоимости до и после изменений.

Затем ищу, сколько это в процентах(proc), после чего меняю поле со стоимостью для иномарок.

Также в самом начале проверяю увеличилась или уменьшилась прежняя стоимость.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
CREATE FUNCTION t5()
RETURNS TRIGGER AS
 
$t5$
 
DECLARE raz INT;
DECLARE proc INT;
 
BEGIN
 
IF (NEW.cost_our > OLD.cost_our) THEN
raz = NEW.cost_our - OLD.cost_our;
END IF;
 
IF (NEW.cost_our <= OLD.cost_our) THEN
raz = OLD.cost_our - NEW.cost_our;
END IF;
 
proc = raz / OLD.cost_our * 100;
 
UPDATE services SET cost_foreign = cost_foreign + cost_foreign * proc / 100;  
 
END;  
  
$t5$
 
LANGUAGE plpgsql;
 
CREATE TRIGGER t5 BEFORE UPDATE ON services
 
FOR each ROW EXECUTE PROCEDURE
t5();
Мне кажется, что моя проблема в том, что я пишу всё, что думаю в коде функции и подозреваю, что там другие порядки в отличии от написания какого-либо алгоритма на плюсах, не относящегося к базам данных.

В общем подскажите пожалуйста, что я делаю не так, и что мне нужно понять, чтобы в следующий раз делать так))
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2017, 01:12
Ответы с готовыми решениями:

Триггер
Не могу понять, как задать условия в триггере. Есть две таблицы: Нагрузка и Расписание Хочу задать условия («Чтобы нельзя...

Триггер
Привет. Смысл: триггер на то, что если в таблице superuser.structurejunction появляется запись у которой assertgroup = 122, то создать...

триггер
какая функция триггера?

3
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
16.05.2017, 05:08
Цитата Сообщение от fredopudge Посмотреть сообщение
UPDATE services SET
а где WHERE? Вы хотите во все таблице прописать одно значение?

NEW и OLD имеют смысл в триггере. Если код вынесен процедуру, то наверное, через параметры нужно передать то, что доступно в триггере. Или писать все в триггере, а не выносить в процедуру.

ИМХО.
0
1 / 1 / 0
Регистрация: 05.03.2016
Сообщений: 49
16.05.2017, 05:41  [ТС]
Изначально я писал без update вот так:

new.cost_foreign = old.cost_foreign + oldcost_foreign * proc / 100;

Триггер должен срабатывать когда я буду вручную писать:

update table set cost_our = value where table_id = ...

И после этого в cost_foreign значение должно меняться.

Ну так я совсем всё неправильно написал? Или нужно что-то подкорректировать?)
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
16.05.2017, 06:23
Лучший ответ Сообщение было отмечено fredopudge как решение

Решение

Сорри, не обратил внимание на
SQL
1
RETURNS TRIGGER
но все равно, вместо
SQL
1
UPDATE ...
похоже должно быть
SQL
1
2
NEW.cost_foreign = <NEW или OLD смотри сам, что имел в виду>.cost_foreign + <NEW или OLD>.cost_foreign * proc / 100; 
RETURN NEW;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.05.2017, 06:23
Помогаю со студенческими работами здесь

Триггер у View
Привет. Хочу добавить триггер ко вью. Но до этого еще далеко, потому как у меня еще с самой функцией проблемы CREATE OR REPLACE...

Триггер для покупок
Есть три таблицы: 1. Список: Артикул (PK) Название товара Цена за единицу 2.Покупка: ID_покупки(PK) Общая сумма

Триггер, почему не работает ?
Создал триггер,чтобы ограничить ввод данных в мое поле. Если будет введены значения меньше нуля или больше 100,то должен сработать триггер...

Триггер выдаёт ошибку
Здравствуйте. Изучаю SQL по видеоурокам одним на ютубе. Так вот, в одном виде там рассказывается про триггерные функции. И даётся пример...

Триггер на обновление поля в таблице
здравствуйте столкнулся с такой проблемой у меня в таблице Сотрудник есть ИНН, но у некоторых сотрудников может не быть ИНН по этому не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru