Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для SadiQ228
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716

Простой триггер

31.07.2020, 04:07. Показов 2652. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я хочу сделать триггер который при вставке нового юзера генерировал бы календарь на оставшийся год для него.

SQL Скопировано
1
2
3
4
CREATE TABLE users (
    id SERIAL PRIMARY KEY NOT NULL,
    username CHARACTER VARYING(30) NOT NULL
);
SQL Скопировано
1
2
3
4
CREATE TABLE calendar (
    user_id INTEGER NOT NULL,
    DATE DATE NOT NULL
);
я создаю функцию, которая при обычном операторе DO у меня работала, но в триггерной функции выдает ошибку:

SQL Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE OR REPLACE FUNCTION gencal() RETURNS TRIGGER AS
$$
BEGIN
 
 DECLARE
    this_year INTEGER = EXTRACT (YEAR FROM CURRENT_DATE) AS INTEGER;
    i INTEGER = 0;
 WHILE this_year = EXTRACT (YEAR FROM CURRENT_DATE+i) AS INTEGER 
 LOOP
    INSERT INTO calendar (user_id, DATE) VALUES (NEW.id,CURRENT_DATE+i);
    i:= i + 1;
 END LOOP;
  
END;
$$
LANGUAGE 'plpgsql'
ERROR: syntax error at or near "WHILE"
LINE 7: WHILE this_year = EXTRACT (YEAR FROM CURRENT_DATE+i) AS INT...
^
SQL state: 42601
Character: 164
в чем ошибка?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.07.2020, 04:07
Ответы с готовыми решениями:

Простой триггер
Добрый день! Помогите, пожалуйста, не могу разобраться. Есть следующий запрос (PDO php): $sql = 'INSERT INTO applications (job_id,...

Простой триггер
Добрый день. Подскажите пожалуйста, есть таблица Client в ней поля id, inicial, status, sale. Триггер должен срабатывать при операции...

Разработать простой триггер
Добрый день. Являюсь абсолютным новичком, поэтому буду благодарен, если кто-нибудь сможет объяснить как это должно выглядеть. Есть две...

3
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
31.07.2020, 09:46
DECLARE выше BEGIN перенесите
см. здесь https://www.postgresql.org/doc... cture.html
1
 Аватар для SadiQ228
-4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
31.07.2020, 16:34  [ТС]
сам триггер:
SQL Скопировано
1
2
3
4
5
CREATE TRIGGER gc
AFTER INSERT
ON users
FOR EACH ROW
EXECUTE PROCEDURE gencal();
пытаюсь вставить запись, но выдает ошибку:
ERROR: control reached end of trigger procedure without RETURN
CONTEXT: PL/pgSQL function gencal()
SQL state: 2F005
это какой стейтмент надо возвращать?
у меня просто инсерт без возвратов же не понимаю что надо возвращать и зачем

Добавлено через 8 минут
SQL Скопировано
1
2
3
4
5
6
7
8
9
10
11
 DECLARE
    this_year INTEGER = EXTRACT (YEAR FROM CURRENT_DATE) AS INTEGER;
    i INTEGER = 0;
BEGIN
 WHILE this_year = EXTRACT (YEAR FROM CURRENT_DATE+i) AS INTEGER 
 LOOP
    INSERT INTO test (indexer, DATE) VALUES (NEW.id,CURRENT_DATE+i);
    i:= i + 1;
 END LOOP;
  RETURN NULL;
END;
вовзаращю ноль, все работает, но не понимаю че к чему кто ни будь прояснит в паре слов?
0
1258 / 973 / 383
Регистрация: 02.09.2012
Сообщений: 3,001
02.08.2020, 00:17
Лучший ответ Сообщение было отмечено SadiQ228 как решение

Решение

триггерная функция ДОЛЖНА возвращать значения - такие правила.
Можно вернуть три варианта: NEW, OLD или NULL.
Что возвращать - зависит от вида триггера BEFORE/AFTER/INSTEAD и операции, на которую он срабатывание INSERT/UPDATE/DELETE.
Что в каких случаях возвращать - расписано здесь.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.08.2020, 00:17
Помогаю со студенческими работами здесь

Простой триггер на добавление
Добрый день. Пытаюсь создать триггер на добавление записи. Хочу при добавлении записи в таблицу 1 добавить эту же (новую) запись и во...

Простой триггер удаления
Здравствуйте. Дайте пример триггера удаления с описанием. Задача: есть главная таблица "Тип" и подлежащая "Товар"....

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

Триггер запрета на ввод, можно какой-нибудь самый простой пример?
доброго времени суток:) нужен любой примерчик с триггером, ограничивающий ввод с сообщением об ошибке. допустим, чтобы id был не...

Триггер для добавления к строке название таблицы, в которой содержится триггер
Есть таблицы База_Практик. В неё добавляю предприятие, и автоматически нужно добавить это предприятие с именем таблицы База практик в...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
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
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер