Существуют пять типов ограничений, которые могут быть установлены В таблице: NOT NULL, PRIMARY KEY, UNIQUE, FOREIGN KEY и CHECK. Как только эти ограничения будут установлены и разрешены, они будут проверяться и выполняться при изменении в таблице любой строки.
Если оператор распространяется на несколько строк и какаялибо из строк вступает в противоречие с ограничением на таблицу, то не будет изменена ни одна строка. Например, если оператор update воздействует на все строки в таблице и с индексом конфликтует только одна из строк, ни одна строка не будет обновлена.
В следующем примере кода показана попытка удалить из таблицы delegates все строки. Однако некоторые из командированных сотрудников имеют заявки в таблице заявок. Между таблицей заявок и таблицей командированных сотрудников существует ограничение foreign key для обеспечения того, чтобы заявки были сделаны только для допустимых значений delegatejd. Оператор delete не воздействует на какие-либо строки, поскольку одна или несколько строк конфликтуют с ограничением FOREIGN KEY (одной или нескольким строкам командированных сотрудников соответствуют заявки, ссылающиеся на их значения delegatejd).
SQL> DELETE FROM delegates;
DELETE FROM delegates *.
ERROR at line 1:
ORA-2 292: integrity constraint.
(ASCEND.FK_BOOKINGS) violated — child record found.
SQL>
Сообщение об ошибке, которое появится после нарушения ограничения, не указывает, сколько строк не соответствует ограничению. Сообщено лишь имя ограничения (в скобках). Можно перехватить сообщение об ошибке с использованием обработчиков исключений PL/SQL и предоставить пользователю более информативное сообщение. Способ реализации этого зависит от инструментального средства Oracle, в котором был использован оператор DELETE.