Problemi con le ForeignKey in Oracle

Programmazione Web e Database Visite: 11013
document_2 Problemi con le ForeignKey in Oracle
A volte, nel cancellare un record da una tabella in Oracle si ottiene l'errore ORA-02292. Vediamo come e perché?

IL PROBLEMA

Vogliamo cancellare un dato record da una data tabella.

           
            DELETE FROM mytablespace.mytable MY
            WHERE MY.id = 12;

 

Nel fare questo, sotto alcune circostanze, si può ottenere il seguente errore Oracle

   [Err] ORA-02292: restrizione di integrità violata (mytablespace.FK_myforeignkey) - chiave figlia trovata
 

Questo errore, ORA-02292, esce fuori perché al record che si vuole cancellare è associata una chiave esterna, il che vuol dire che c'è un record in un'altra tabella che fa riferimento al record che si vuole cancellare. La cancellzione quindi non è ammessa. Bisogna cancellare prima il record che fa riferimento al nostro.
Ma come si fa a sapere quale sia l'altra tabella che fa riferimento alla nostra?
Di solito è sufficiente andare sulla nostra tabella mytable e verificare se questa tabella dichiara delle foreignkey.
Però se la foreignkey che ci crea problemi non è definita nella nostra tabella ma è definita in un'altra tabella come si fa?
Un buon metodo è eseguire la seguente query:

select owner,constraint_name,constraint_type,table_name,r_owner, r_constraint_name
from all_constraints
where constraint_type='R'
and r_constraint_name
in (select constraint_name
from all_constraints
where constraint_type in ('P','U') and table_name='MYTABLE' )


Questa query vi dirà tutto ciò che vi serve!