powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Создание триггера.
15 сообщений из 15, страница 1 из 1
Создание триггера.
    #39417664
Ivan5252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Начинаю писать триггеры. Хочу написать следующий триггер: при добавлении в таблицу ПТС такой строки, в которой будет совпадать ЛИБО VIN, ЛИБО Номер_ПТС, ЛИБО Государственный_знак с уже имеющимися в таблице, необходимо выдавать сообщение: Невозможно добавить строку!

Непосредственно таблица:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE ПТС (
VIN                      varchar(30) NOT NULL PRIMARY KEY,
Номер_двигателя          varchar(50) NOT NULL UNIQUE REFERENCES Описание_двигателя(Номер_двигателя),
Цвет                     varchar(30) NOT NULL,
Тип_тс                   varchar(20) NOT NULL,
Категория_тс             varchar(15) NOT NULL,
Номер_ПТС                varchar(15) NOT NULL UNIQUE,
Государственный_знак     varchar(15) NOT NULL UNIQUE
);



Мои попытки создания триггера:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE FUNCTION new_PTS()
  RETURNS TRIGGER AS
$$
BEGIN
IF EXISTS(   
         SELECT *
         FROM ПТС
         WHERE VIN IN(
         SELECT VIN
         FROM ПТС))
         THEN        
     RAISE EXCEPTION 'Невозможно добавить строку!';   
   END IF;
   RETURN NULL;
END
$$ LANGUAGE plpgsql;



Код: plsql
1.
2.
3.
4.
5.
CREATE TRIGGER new_pp
  AFTER INSERT
  ON ПТС
  FOR EACH ROW
  EXECUTE PROCEDURE new_PTS();



Понимаю, что в функции необходимо, скорее всего, использовать таблицу NEW и с ней как-то взаимодействовать, но как - тоже вопрос.
...
Рейтинг: 0 / 0
Создание триггера.
    #39417684
kira ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan5252,
Для начала почитать это
Ivan5252использовать таблицу NEW
это не таблица, это новые данные

в вашем случае :
Код: sql
1.
2.
3.
4.
5.
............
         FROM ПТС
         WHERE NEW.VIN IN(
         SELECT VIN
..........



но вот как "выдавать сообщение" додумывайте сами :)
...
Рейтинг: 0 / 0
Создание триггера.
    #39417690
Ivan5252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kira ivanov, я читал документацию, оттуда и узнал про NEW (и OLD). =)
Изменил функцию, но по-прежнему не работает...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE OR REPLACE FUNCTION new_PTS()
  RETURNS TRIGGER AS
$$
BEGIN
IF EXISTS(   
         SELECT *
         FROM ПТС
         WHERE NEW.VIN OR NEW.Номер_ПТС OR NEW.Государственный_знак IN(
         SELECT VIN, Номер_ПТС, Государственный_знак
         FROM ПТС))   
         THEN          
     RAISE EXCEPTION 'Невозможно добавить строку!';
   END IF;
RETURN NULL;
END
$$ LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
Создание триггера.
    #39417702
kira ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan5252,

Код: sql
1.
RETURN NEW;


а не
Код: sql
1.
RETURN NULL;



и что в логе постгреса ? не понятно что значит "не работает"
...
Рейтинг: 0 / 0
Создание триггера.
    #39417708
Ivan5252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kira ivanov, после ввода КОРРЕКТНЫХ данных в таблицу выскакивает сообщение:
...
Рейтинг: 0 / 0
Создание триггера.
    #39417712
Ivan5252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kira ivanov, либо перечисление через OR надо как-то другим способом организовать, либо его здесь нельзя использовать
...
Рейтинг: 0 / 0
Создание триггера.
    #39417714
Ivan5252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kira ivanov, если оставить только одно условие в WHERE, то ошибка сохраняется:
...
Рейтинг: 0 / 0
Создание триггера.
    #39417715
kira ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan5252,

кирилица в именовании столбцов... :( извините, но даже вникать не буду... завтра народ придет и помогут.... ошибка к тригерам никакого отношения не имеет
...
Рейтинг: 0 / 0
Создание триггера.
    #39417721
Ivan5252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kira ivanov, спасибо, что откликнулись.
Теперь при вводе корректных данных выскакивает сообщение: Невозможно добавить строку!
...
Рейтинг: 0 / 0
Создание триггера.
    #39417757
Ivan5252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался.
...
Рейтинг: 0 / 0
Создание триггера.
    #39417795
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan5252,

Для проверки уникальности полей можно сделать уникальные индексы (3 штуки) — быстрее будет.
...
Рейтинг: 0 / 0
Создание триггера.
    #39417805
Ivan5252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov, да тут скорее на разобраться пример был. Так как ограничение UNIQUE стоит. Оно и не даст в необходимых полях одинаковые значения ввести.
...
Рейтинг: 0 / 0
Создание триггера.
    #39417806
Ivan5252
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorov, возможно, вы это и имели ввиду=)
...
Рейтинг: 0 / 0
Создание триггера.
    #39418517
ambasador
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Один вопрос по триггерам, функция вызывается до или после экшена, можно это контролировать типа before или after?
...
Рейтинг: 0 / 0
Создание триггера.
    #39418518
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Создание триггера.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]