может кто-нибудь помочь мне написать триггер, чтобы запретить конкретную запись в таблицу (например, location = 'chicago' не разрешено). Схема таблицы выглядит следующим образом (deptno, deptname, location). Я использую оракул 10g.до INSERT или Update trigger plsql
ответ
Вы можете легко сделать то, что хотите, с помощью CHECK CONSTRAINT на своей колонке.
ALTER TABLE T
ADD CONSTRAINT constraint_name CHECK (location <> 'chicago') [DISABLE];
ВЫКЛЮЧИТЬ необязательное ключевое слово. Если вы создаете контрольное ограничение, используя ключевое слово DISABLE, будет создано ограничение , , но условие не будет исполнено.
Constraint Штаты
- ВКЛЮЧИТЬ - обеспечить, чтобы все входящие данные соответствуют ограничению
- DISABLE - разрешить входящие данные, независимо от того, соответствует ли она ограничения
- VALIDATE - убедитесь, что существующие данные соответствуют con straint
- NOVALIDATE - существующие данные не должны соответствовать ограничению
Они могут быть использованы в комбинации
ВКЛЮЧИТЬ {[по умолчанию] VALIDATE | NOVALIDATE}
DISABLE {VALIDATE | [по умолчанию] NOVALIDATE}
ВКЛЮЧИТЬ VALIDATE такое же, как ВКЛЮЧИТЬ.
ENABLE NOVALIDATE означает, что ограничение проверено, но оно не обязательно должно быть истинным для всех строк. это возобновит проверку ограничений на отключенных ограничениях без предварительной проверки всех данных в таблице.
DISABLE NOVALIDATE - это то же самое, что и DISABLE.
DISABLE VALIDATE отключает ограничение, снижает индекс ограничения и запрещает любую модификацию ограниченных столбцов. для ограничения UNIQUE, это позволяет загружать данные из нераспределенной таблицы в секционированную таблицу, используя предложение ALTER TABLE .. EXCHANGE PARTITION.
Ниже приведен пример триггера ДО НАЧАЛА ВСТАВКИ. Однако лучше создать ограничения на вашу схему или выполнить CUSTOM_INSERT PROCEDURE, чтобы отфильтровать ее. Here - хорошая статья о Целостность данных - ограничения и триггеры.
Триггеры не должны использоваться для обеспечения бизнес-правил или ссылочной правила целостности, которые могут быть реализованы с простыми ограничениями.
Пример триггера (считают это плохая идея для фильтрации входных данных):
CREATE TRIGGER myTrigger
BEFORE INSERT
ON table
REFERENCING NEW AS New
FOR EACH ROW
BEGIN
IF (New.location = 'chicago') THEN
RAISE cError;
EXCEPTION
WHEN cError THEN
RAISE_APPLICATION_EXCEPTION(-20001,'Chicago is not allowed');
END;
Вместо DELETE должен быть RAISE_APPLICATION_ERROR (-20000, «Нет, Чикаго, пожалуйста!»); – jva
Вся триггерная вещь вообще не нужна. И на моем примере (плохой) триггер после ... –
Недостатком триггера является то, что вам придется сбой инструкции. С ограничением проверки разработчик имеет возможность использовать предложение LOG ERRORS, чтобы вставлять достоверные данные и вносить недопустимые данные в таблицу исключений. Очень полезен для массовых нагрузок данных. –
- 1. PostgreSQL Trigger on Insert или Update
- 2. TRIGGER with INSERT AND UPDATE
- 3. ANSI SQL Trigger on INSERT & UPDATE
- 4. PLSQL - Trigger не отвечает
- 5. ORACLE PLSQL Функция/Trigger
- 6. TRIGGER или MULTI Insert
- 7. Update/Insert trigger в SQL Server
- 8. Update Trigger on Insert in AS400
- 9. MySQL Trigger. Должен ли я использовать INSERT или UPDATE
- 10. Postgres insert или update trigger WHEN Условие (old)
- 11. Oracle Insert, Update, Delete Trigger with Join
- 12. oracle trigger on update и on insert
- 13. MSSql Trigger on Update Insert (Updatecounter)
- 14. где условие Insert/Update Trigger не работает
- 15. SQL AFTER Insert Trigger for Update
- 16. MySQL After Insert и After Update Trigger
- 17. MySQL trigger: включить UPDATE в UPDATE и INSERT?
- 18. MySQL Trigger: Before Insert или After Insert
- 19. SQL INSERT или UPDATE
- 20. NHibernate bulk insert или update
- 21. UPDATE TRIGGER?
- 22. Обработка записи Если существует запись UPDATE, INSERT в PLSQL
- 23. MariaDB ДО INSERT TRIGGER для UUID
- 24. INSERT или дубликат KEY UPDATE
- 25. UPDATE или INSERT MySQL Python
- 26. PLSQL Variable Insert
- 27. Trigger to Update Table
- 28. SQL - TRIGGER ПОСЛЕ INSERT
- 29. Insert/Update Триггеры
- 30. Ошибка: Insert After Trigger
Это легко достигается с помощью хранимой процедуры, но я не уверен, что я положил его туда либо (если у вас есть разработчики, работающие непосредственно в вашей базе данных, и вы хотите ограничить их, не слишком вероятно), эти виды бизнес-сдерживаний обычно выполняются в коде, много слоев над базой данных. Конечно, я ничего не знаю о вашем коде или вашем дизайне, просто комментарий ... – Kobi