Это зависит.
Предполагается, что существует ограничение внешнего ключа между дочерней таблицей и родительской таблицей, если вы попытаетесь вставить строку в дочернюю таблицу, используя ключ, который не существует в родительской таблице.INSERT
сгенерирует исключение, указывающее, что ограничение было нарушено.Вам не нужно ничего проверять, если вы просто хотите, чтобы операция INSERT
завершилась с ошибкой с исключением из-за нарушения ограничения.
С другой стороны, вы можете захотеть закодировать валидацию, чтобы обеспечить лучшие исключения длявызывающий абонент.Например, довольно распространено, что таблица будет иметь несколько внешних ключей, которые ссылаются на различные другие таблицы.Может быть полезно проверить, являются ли параметры действительными, чтобы вы могли более точно указать вызывающей стороне, какой параметр был недействительным.
Если вы спрашиваете, как убедиться, что либо вставка в родительскую таблицу, либо вставкав дочернюю таблицу успешно или что оба терпят неудачу, тогда вы говорите о том, как установить правильные транзакционные границы.Вы бы сделали что-то вроде
BEGIN
insert_into_parent( <<list of parameters>> );
insert_into_child( <<list of parameters>> );
commit;
EXCEPTION
WHEN others
THEN
rollback;
RAISE;
END;
Обратите внимание, что ваши приложения PL / SQL всегда должны явно либо фиксировать, либо выполнять откат.И эти операторы управления транзакциями должны быть на самом высоком возможном уровне.Например, вы не захотите использовать операторы управления транзакциями в процедуре insert_into_parent
, потому что тогда вы никогда не сможете использовать эту процедуру, если вам нужна более обширная область транзакции.