Если я вас правильно понял, вы делаете в точности то, что хотели бы.
ON DELETE CASCADE
используется, если вы хотите удалить как основные, так и подробные строки с помощью одной команды DELETE
, то есть удаление главного приведет к удалению всех его деталей.
Вы сказали, что хотите предотвратить это.
Итак - удалите эту опцию из оператора ограничения, т.е.
stafftitle varchar2(20) constraint fk_staff_position references position (title)
Вот пример:
SQL> create table position (title varchar2(20) primary key);
Table created.
SQL> create table staffmember
2 (staffno integer primary key,
3 name varchar2(20),
4 salary decimal (8, 2),
5 stafftitle varchar2(20) constraint fk_staff_pos references position (title)
6 );
Table created.
SQL> insert into position (title) values ('some title');
1 row created.
SQL> insert into staffmember (staffno, name, salary, stafftitle)
2 values (1, 'name', 100, 'some title');
1 row created.
SQL> delete from position;
delete from position
*
ERROR at line 1:
ORA-02292: integrity constraint (SCOTT.FK_STAFF_POS) violated - child record found
SQL>
См? Вы не можете удалить мастер, пока есть детали.