Форум программистов, компьютерный форум, киберфорум
Firebird/InterBase
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Рожденная для битвы
293 / 71 / 14
Регистрация: 08.11.2009
Сообщений: 1,260
1

Ограничение на количество (триггер)

15.04.2012, 20:47. Показов 1999. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
SQL
1
2
3
4
5
6
7
8
CREATE TRIGGER kolvo_p
FOR c_preparat
BEFORE INSERT AS
DECLARE VARIABLE k;
--numb_c=new.n_c;
k=SELECT COUNT (n_prepar) FROM c_preparat WHERE n_c=NEW.n_c;
IF (k=5)
THEN EXCEPTION RAISE_TOO_HIGH;
Возможно ли чтоб такая запись работала?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2012, 20:47
Ответы с готовыми решениями:

Триггер на ограничение значения
ALTER TRIGGER LIMITSIZE ACTIVE AFTER INSERT POSITION 0 AS begin if ((new.size_lend >30000) ...

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

Триггер на ограничение вставки в таблицу данных
Добрый день. Когда добавляю новую строку в таблицу, если условия не соблюдаются, то срабатывает...

Триггер, для ограничение ввода данных
Здравствуйте, не могу вообще понять как сделать данное условие.... Хочу задать условия («Чтобы...

7
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
15.04.2012, 20:50 2
- тело триггера оборачивается в begin/end

- запрос типа k=SELECT COUNT (n_prepar) FROM c_preparat WHERE n_c=NEW.n_c;
следует оборачивать в скобки (правую часть присваивания).
1
Рожденная для битвы
293 / 71 / 14
Регистрация: 08.11.2009
Сообщений: 1,260
15.04.2012, 21:15  [ТС] 3
Цитата Сообщение от arni Посмотреть сообщение
- тело триггера оборачивается в begin/end
- запрос типа k=SELECT COUNT (n_prepar) FROM c_preparat WHERE n_c=NEW.n_c;
следует оборачивать в скобки (правую часть присваивания).
Исправила:
SQL
1
2
3
4
5
6
7
8
9
10
CREATE TRIGGER kolvo_p
FOR c_preparat
BEFORE INSERT AS
DECLARE VARIABLE k;
--numb_c=new.n_c;
BEGIN
k=(SELECT COUNT (n_prepar) FROM c_preparat WHERE n_c=NEW.n_c);
IF (k=5)
THEN EXCEPTION RAISE_TOO_HIGH;
END
Но появляется ошибка
Неизвестный символ на линии 4, № символа 17
0
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
15.04.2012, 21:20 4
marina2,
SQL
1
DECLARE VARIABLE k INT;
либо
SQL
1
2
3
4
5
6
7
CREATE TRIGGER kolvo_p
FOR c_preparat
BEFORE INSERT AS
BEGIN
  IF ((SELECT COUNT(n_prepar) FROM c_preparat WHERE n_c=NEW.n_c)>=5) THEN
    EXCEPTION RAISE_TOO_HIGH;
END
1
Рожденная для битвы
293 / 71 / 14
Регистрация: 08.11.2009
Сообщений: 1,260
15.04.2012, 21:38  [ТС] 5
Ограничение на количество (триггер)


Что-то не так.
0
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
15.04.2012, 21:59 6
marina2, судя по IBConsole у вас Interbase, для которого такой синтаксис не подойдет. Попробуйте так:
SQL
1
2
3
4
5
6
7
8
9
CREATE TRIGGER kolvo_p
FOR c_preparat
BEFORE INSERT AS
DECLARE VARIABLE k INT;
BEGIN
  SELECT COUNT(n_prepar) FROM c_preparat WHERE n_c=NEW.n_c INTO :k;
  IF (k>=5) THEN 
    EXCEPTION RAISE_TOO_HIGH;
END
1
Рожденная для битвы
293 / 71 / 14
Регистрация: 08.11.2009
Сообщений: 1,260
15.04.2012, 22:28  [ТС] 7
arni, круто! Спасибо большое)

Добавлено через 23 минуты
Еще такой вопрос: Что означает дэта запись?
SQL
1
SET TERM !! ;
0
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
15.04.2012, 22:48 8
marina2, используется в скриптах перед блоком определения процедур/триггеров чтобы экранировать знак точка-с-запятой, который внутри этих самых процедур/триггеров. Чтобы в процессе исполнения скрипта тупому интерпретатору было понятно, где инструкции внутри процедур/триггеров, и где конец этих самых процедур/триггеров. Заканчивается блок обратным оператором, который возвращает разделить назад:
SET TERM ; !!

p.s. обычно только используется не !!, а ^, хотя это без разности - любой маркер можно использовать.
1
15.04.2012, 22:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2012, 22:48
Помогаю со студенческими работами здесь

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

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

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

Триггер: запретить заказывать товар, если количество товара в заказе будет больше чем количество на складе
Какое будет условие для триггера если количество товара в заказе будет больше чем количества на...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru