ORA-02291: integrity constraint (SCHEMA.CONSTRAINT) violated - parent key not found
Foreign key değerinin üst tabloda karşılığı olmayan bir alt satır eklediniz ya da güncellediniz. Önce üst kaydı ekleyin ya da değeri düzeltin.
ORA-02291 ne demek?
Foreign key, her alt satırın var olan bir üst satırı göstermesini garanti eder. ORA-02291, verdiğiniz değerin üst kaydı olmadığını söyler. Mesaj kısıtın adını verir; kolonları ve üst tablosu veri sözlüğündedir. Alt satır silmek bu hatayı hiç vermez; üst taraf için bkz. ORA-02292.
ORA-02291 neden olur?
- Yanlış ya da hatalı yazılmış bir anahtar değeri.
- Alt veriyi üst veriden önce yüklemek.
- Üst satırın silinmiş olması ya da başka bir oturumda commit edilmemiş olması.
- Ortamlar arası veri farkı: testte geçerli bir ID üretimde yoktur.
ORA-02291 nasıl çözülür?
- Kısıtın üst tablosunu ve kolonlarını
ALL_CONSTRAINTSile bulun. - Değerin üst tabloda olup olmadığına bakın.
- Üstleri altlardan önce yükleyin ya da
DEFERRABLEbir kısıtla ikisini tek işlemde ekleyin. - Hatayı geçmek için kısıtı kapatmayın: öksüz satırlar sonra sorun çıkarır.
ORA-02291 örneği
Üst tablo hangisi?
SELECT c.table_name AS alt, p.table_name AS ust, p.constraint_name
FROM all_constraints c
JOIN all_constraints p
ON p.owner = c.r_owner AND p.constraint_name = c.r_constraint_name
WHERE c.constraint_name = 'FK_ORDERS_CUSTOMER';
SQLlightspeed’de
Bir ifade hata verdiğinde SQLlightspeed’in hata paneli, hata kodunu sade bir Türkçe açıklama ve ne yapmanız gerektiğine dair bir öneriyle; Oracle’ın kendi mesajı ve Oracle dokümantasyonuna bağlantıyla birlikte gösterir — bu hata ve sık görülen onlarca başka hata için.
İlgili hatalar
ORA-02292ORA-00001ORA-01400 Tüm Oracle hataları →
Oracle dokümantasyonu: ORA-02291. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.