Вы можете объявить ограничения внешнего ключа, которые удаляются каскадом, чтобы дочерние строки автоматически удалялись при удалении родительской строки.
SQL> create table parent (
2 parent_key number primary key
3 );
Table created.
SQL> create table child (
2 child_key number primary key,
3 parent_key number,
4 constraint fk_child_parent foreign key( parent_key )
5 references parent( parent_key )
6 on delete cascade
7 );
Table created.
SQL> insert into parent values( 1 );
1 row created.
SQL> insert into child values( 10, 1 );
1 row created.
SQL> commit;
Commit complete.
SQL> delete from parent where parent_key = 1;
1 row deleted.
SQL> select * from child;
no rows selected
Лично я не являюсь поклонником такого рода каскадного удаления - я бы предпочел, чтобы удаление по дочерней таблице было частью процедуры, которая удаляет из родительского элемента, так что весь поток программы в одном место. Каскадные внешние ключи похожи на триггеры в том, что они могут серьезно усложнить ход программы, добавив действия, которые трудно читателю прочитать через код, чтобы заметить и отследить.