Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
3 / 2 / 1
Регистрация: 22.01.2018
Сообщений: 23

Триггерные процедуры

06.11.2018, 09:19. Показов 3431. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте программисты.
Помогите пожалуйста с триггером в бд Postgres. Помогите написать триггер, при добавлении записи в таблицу sale, price считался автоматически.

Имеются 2 таблицы:
Product
idnameprice
1tovar11000
2tovar22000

sale
idnameamountprice
1tovar122000
2tovar236000

Это просто как образец, не думайте что ищу готовое решение. Просто примеров очень мало, и не могу понять как написать. А по этому образцу выполню свою работу. Спасибо заранее.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2018, 09:19
Ответы с готовыми решениями:

Триггерные функции
Подскажите, пожалуйста, пример использования динамической библиотеки (.so) в триггерной функции... На все мои библиотеки выдает ошибку: ...

Триггеры и триггерные функции
Подскажите пожалуйста, у меня проблема, не получается создать триггерную функцию для следующей задачи: Таблицы: 1. Клиент, поля:...

Триггеры и Триггерные функции
БД psql (PostgreSQL) 10.5. На примере документации (https://postgrespro.ru/docs/postgrespro/9.5/plpgsql-trigger Пример 40.4. Триггерная...

12
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
06.11.2018, 13:57
Лучший ответ Сообщение было отмечено Briz73Rus как решение

Решение

В оф. документации пример 43.4
Вам нужен триггер на INSERT и UPDATE таблицы sale.
1
3 / 2 / 1
Регистрация: 22.01.2018
Сообщений: 23
06.11.2018, 14:12  [ТС]
Цитата Сообщение от grgdvo Посмотреть сообщение
Вам нужен триггер на INSERT и UPDATE таблицы sale.
Мне бы пример триггера. Так как я не могу разобраться именно в синтаксисе. В теории я понимаю что надо делать. А на практике, чёт туплю... Либо уже эта тема так надоела, что уже не понимаю что к чему...
0
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
06.11.2018, 17:35
Вы указанный пример триггера смотрели?? Что конкретно непонятно в примере?? Какой элемент синтаксиса??
Для триггера нужно как минимум
1) таблица, к которой будет этот триггер "привязан" (CREATE TABLE)
2) триггерная функция, которая выполняет функцию обработчика триггера (CREATE FUNCTION)
3) собственно само объявление и создание триггера (CREATE TRIGGER)
Вам нужно написать 3 CREATE'а.
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 2
06.11.2018, 22:10
Цитата Сообщение от grgdvo Посмотреть сообщение
триггерная функция, которая выполняет функцию обработчика триггера (CREATE FUNCTION)
я не знаю что писать в обработчике
0
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
07.11.2018, 13:45
Лучший ответ Сообщение было отмечено Briz73Rus как решение

Решение

В функции-обработчике Вам нужно
1. получить цену по продукту, который вы в данный момент добавляете (SELECT price FROM product WHERE id = NEW.id)
2. если такого товара нет, видимо, запретить добавление (вернуть OLD)
3. присвоить NEW.price = _price (из п.1) * NEW.ammount
4. вернуть NEW
1
3 / 2 / 1
Регистрация: 22.01.2018
Сообщений: 23
07.11.2018, 14:31  [ТС]
Цитата Сообщение от grgdvo Посмотреть сообщение
В функции-обработчике Вам нужно
1. получить цену по продукту, который вы в данный момент добавляете (SELECT price FROM product WHERE id = NEW.id)
2. если такого товара нет, видимо, запретить добавление (вернуть OLD)
3. присвоить NEW.price = _price (из п.1) * NEW.ammount
4. вернуть NEW
Спасибо большое, все у меня получилось.

Я в принципе разобрался с тригггерами, простыми, суммы и т.п. А вот как получить данные с другой таблицы, было немного сложновато, но я почти разобрался.
0
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
07.11.2018, 14:32
Если вы будете показывать Ваш рабочий код, дело пойдет быстрее
0
3 / 2 / 1
Регистрация: 22.01.2018
Сообщений: 23
07.11.2018, 15:21  [ТС]
А как вытащить данные через 2 таблицы? Каждая таблица соединена ключами id

Добавлено через 14 минут
Цитата Сообщение от grgdvo Посмотреть сообщение
Если вы будете показывать Ваш рабочий код, дело пойдет быстрее
Не хотелось бы получить готовое решение. А вот такими подсказками как у вас, очень даже хорошо.
0
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
07.11.2018, 15:30
Цитата Сообщение от Briz73Rus Посмотреть сообщение
А как вытащить данные через 2 таблицы? Каждая таблица соединена ключами id
Для этого применяется соединение (JOIN) таблиц
SQL Скопировано
1
SELECT product.id, product.name, product.price, sale.amount, sale.price FROM sale JOIN product USING (id)
0
3 / 2 / 1
Регистрация: 22.01.2018
Сообщений: 23
07.11.2018, 20:03  [ТС]
не получается, я наверно не совсем понял как это все работает.
У меня есть вот такие таблицы. В таблице Report в последнем столбце считается ЗП по (StaffID, WorkID, Time) в WorkID я получил данные с таблицы Work. А с StaffID проблемы Я сделал объединение вот так:

SQL Скопировано
1
2
3
4
5
6
7
SELECT 
  staff.name,
  POSITION.name,
  POSITION.moneytime
FROM 
  POSITION 
JOIN staff USING (positionid);
Как вытащить MoneyTime из таблицы Position и привязать к StaffID?
Миниатюры
Триггерные процедуры  
0
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
08.11.2018, 01:59
Лучший ответ Сообщение было отмечено Briz73Rus как решение

Решение

Синтаксис USING работает, когда имена полей, по которым связываются таблицы, одинаковые.
Когда разные, можно написать так

SQL Скопировано
1
2
3
4
5
6
7
SELECT 
  s.name,
  P.name,
  P.moneytime
FROM 
  POSITION AS p
JOIN staff AS s ON p.positionid = s.positionpositionid;
0
3 / 2 / 1
Регистрация: 22.01.2018
Сообщений: 23
08.11.2018, 09:16  [ТС]
Все получилось. Пришлось почитать доки, как делать вложенные запросы, что такое псевдоним и потрясти бубен.

Спасибо огромное за помощь

PS: Рабочий код выложу позже, как сдам курсовую
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.11.2018, 09:16
Помогаю со студенческими работами здесь

Функции и процедуры. При помощи процедуры записать слова задом наперед
Дана строка S, состоящая из не менее 5 слов. При помощи процедуры записать слова задом наперед. Порядок слов сохранить. ...

Почему delphi после окончания процедуры переходит в начало/середину процедуры?
Почему delphi после второго end; переходит к while, а в полной версии процедуры в ее середину? program hren; uses SysUtils,...

Запуск процедуры выхода во время работы другой процедуры
как зделать процедуру которая будет запускаться так сказать вне очереди! ну или точнее суть проблемы : процедура из 6 шагов с...

Использование имени процедуры в качестве параметра другой процедуры
Предложите, пожалуйста, пример решения след. задачи с использованием вышеуказанного условия: Составить процедуру, которая для...

Использование имени процедуры в качестве параметра другой процедуры
Для заданного массива В составить процедуру, определяющую отрезок, на который попадают заданного массива Р. Применить процедуру для k...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
JWT аутентификация в Java
Javaican 21.04.2025
JWT (JSON Web Token) представляет собой открытый стандарт (RFC 7519), который определяет компактный и самодостаточный способ передачи информации между сторонами в виде JSON-объекта. Эта информация. . .
Спринты Agile: Планирование, выполнение, ревью и ретроспектива
EggHead 21.04.2025
Спринты — сердцевина Agile-методологии, позволяющая командам создавать работающий продукт итерационно, с постоянной проверкой гипотез и адаптацией к изменениям. В основе концепции спринтов лежит. . .
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров
Programma_Boinc 21.04.2025
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров. 3 марта 2025 года, в результате обобщенного поиска простых чисел Ферма в PrimeGrid был найден. . .
Система статов в Unity
GameUnited 20.04.2025
Статы — фундаментальный элемент игрового дизайна, который определяет характеристики персонажей, предметов и других объектов в игровом мире. Будь то показатель силы в RPG, скорость передвижения в. . .
Статические свойства и методы в TypeScript
run.dev 20.04.2025
TypeScript прочно занял своё место в системе современной веб-разработки. Этот строго типизированный язык программирования не просто расширяет возможности JavaScript — он делает разработку более. . .
Batch Transform и Batch Gizmo Drawing API в Unity
GameUnited 20.04.2025
В мире разработки игр и приложений на Unity производительность всегда была критическим фактором успеха. Создатели игр постоянно балансируют между визуальной привлекательностью и плавностью работы. . .
Звук в Unity: Рандомизация с Audio Random Container
GameUnited 20.04.2025
В современных играх звуковое оформление часто становится элементом, который либо полностью погружает игрока в виртуальный мир, либо разрушает атмосферу за считанные минуты. Представьте: вы исследуете. . .
Максимальная производительность C#: Советы, тестирование и заключение
stackOverflow 20.04.2025
Погружение в мир микрооптимизаций C# открывает перед разработчиком целый арсенал мощных техник. Но как определить, где и когда их применять? Ответ начинается с точных измерений и профилирования. . . .
Максимальная производительность C#: Предсказание ветвлений
stackOverflow 20.04.2025
Третий ключевой аспект низкоуровневой оптимизации — предсказание ветвлений. Эта тема менее известна среди разработчиков, но её влияние на производительность может быть колоссальным. Чтобы понять. . .
Максимальная производительность C#: Векторизация (SIMD)
stackOverflow 20.04.2025
Помимо работы с кэшем, другим ключевым аспектом низкоуровневой оптимизации является векторизация вычислений. SIMD (Single Instruction, Multiple Data) позволяет обрабатывать несколько элементов данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер