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

Ошибка в триггерной функции

15.03.2019, 10:59. Показов 1467. Ответов 1

Студворк — интернет-сервис помощи студентам
Существуют две таблицы: Заказы и Доставка. По заданию создаю триггер, который при удалении попадающей под условие записи из таблицы доставка, будет удалять соответствующую запись из таблицы Заказы. Таблицы связаны по Номеру заказа.
Триггер работает, тобишь удаляет запись из таблицы заказ, но удалённая из таблицы Доставка запись снова появляется после обновления.
SQL
1
2
3
4
5
6
7
8
9
10
CREATE OR REPLACE FUNCTION "Просроч"()
RETURNS TRIGGER AS $$
BEGIN
DELETE FROM "Заказы"
USING "Доставка"
WHERE "Доставка"."Дата_время"< CURRENT_DATE AND "Доставка"."Доставлен"=FALSE AND "Заказы"."Код_заказа"="Доставка"."Заказ";
RETURN NEW;
END;
$$
LANGUAGE plpgsql ;
SQL
1
2
3
4
CREATE TRIGGER "Просроч"
BEFORE DELETE ON "Доставка"
FOR EACH ROW 
EXECUTE PROCEDURE "Просроч"()
Добавлено через 19 минут
Нашёл ещё косяк. При удалении одной записи из таблицы Доставка, удаляются все попадающие под условие записи таблицы Заказы. Наверное нужно сделать триггер, который будет вначале удалять все однотипные (попадающие под условие) записи из таблицы "Доставка", а затем все связанные с ними записи из таблицы Заказы. Каскадное удаление наоборот получается ))
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.03.2019, 10:59
Ответы с готовыми решениями:

Ошибка "столбец не существует" внутри триггерной функции
Задача:при вставке новой записи в таблицу с поставками, найти актуальную цену на деталь в таблице с ценами. В случае, если цена не...

Сохранить значение в триггерной функции
Доброй ночи. Есть таблица, создан триггер(after insert/update) с фу-ей в которой выполнятся рекурсивный запрос все выполнятся только не...

Использовать имя таблицы в качестве параметра триггерной функции
Добрый день всем, есть такая задача: Имеем 3 таблицы: group1(id serial, name1 text), prod(id serial, group_id serial, name1 text),...

1
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
16.03.2019, 14:48
Лучший ответ Сообщение было отмечено Sasha5289 как решение

Решение

Цитата Сообщение от Sasha5289 Посмотреть сообщение
Триггер работает, тобишь удаляет запись из таблицы заказ, но удалённая из таблицы Доставка запись снова появляется после обновления.
Вот этот абзац о работе BEFORE триггера прочитайте. Если я вас правильно понял вам надо вернуть RETURN OLD;
Row-level triggers fired BEFORE can return null to signal the trigger manager to skip the rest of the operation for this row (i.e., subsequent triggers are not fired, and the INSERT/UPDATE/DELETE does not occur for this row). If a nonnull value is returned then the operation proceeds with that row value. Returning a row value different from the original value of NEW alters the row that will be inserted or updated. Thus, if the trigger function wants the triggering action to succeed normally without altering the row value, NEW (or a value equal thereto) has to be returned. To alter the row to be stored, it is possible to replace single values directly in NEW and return the modified NEW, or to build a complete new record/row to return. In the case of a before-trigger on DELETE, the returned value has no direct effect, but it has to be nonnull to allow the trigger action to proceed. Note that NEW is null in DELETE triggers, so returning that is usually not sensible. The usual idiom in DELETE triggers is to return OLD.
Цитата Сообщение от Sasha5289 Посмотреть сообщение
При удалении одной записи из таблицы Доставка, удаляются все попадающие под условие записи таблицы Заказы
Ну так вы удаляйте только записи, которые связаны по заказу, который у вас пришел на удаление (переменная OLD).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.03.2019, 14:48
Помогаю со студенческими работами здесь

Как получить данные из другой таблицы внутри триггерной функции
Добрый день. Нужна помощь в создании триггерной функции на PL/pgSQL Задача у меня следующая: При изменении определенной...

Не могу изменить поля в NEW в триггерной ф-ии
Добрый день, коллеги. Ранее не использовал триггеры в PostgreSQL. И столкнулся с непонятной проблемой. Вот простая триггерная ф-ия :...

А почему ошибка, что функции print и read не определены в функции main()?
Что-то не понимаю. Они определены в заголовочном файле. А подчеркивается красным что нет.... #include &lt;iostream&gt; #include...

Ошибка формирования отчета в СКД: ошибка при попытке вычисления значения агрегатной функции
Решая свою задачку, нарыла формулу, в которой вылазит ошибка. И не могу понять.. Вот формула ВЫБОР КОГДА...

Ошибка в шаблоне функции: "Отсутствуют экземпляры шаблон функции, соответствующие списку аргументов"
#include &lt;iostream&gt; #include &lt;iterator&gt; #include &lt;map&gt; #include &lt;Windows.h&gt; #include &lt;functional&gt; #include &lt;string&gt; #include...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru