ORA-02292: integrity constraint (SCHEMA.CONSTRAINT) violated - child record found
Alt satırların hâlâ gösterdiği bir üst satırı silmeye ya da değiştirmeye çalıştınız. Önce alt satırları silin ya da başka bir üst kayda taşıyın; gerçek kural buysa ON DELETE CASCADE kullanın.
ORA-02292 ne demek?
Foreign key öksüz satırları engeller; bu yüzden alt satırlar gösterdiği sürece üst satır silinemez. Mesaj kısıtın adını verir; alt tablo veri sözlüğünden bulunur. Üst tablonun tamamını silmenin ayrı bir hatası vardır: ORA-02449.
ORA-02292 neden olur?
- Alt satırları olan bir üst satırı silmek.
- Altların gösterdiği bir üst anahtarı güncellemek.
- Bilmediğiniz bir alt tablo; örneğin başka bir şemada.
- Tabloları yanlış sırayla silen temizlik betikleri.
ORA-02292 nasıl çözülür?
- Kısıt adıyla alt tabloyu
ALL_CONSTRAINTS’te bulun. - Altlara ne olacağına karar verin: önce silin ya da başka bir üst kayda taşıyın.
- Altlar her zaman üstle birlikte gitmeliyse foreign key’i
ON DELETE CASCADEile tanımlayın. İyi düşünün: tek bir silme o zaman çok daha fazlasını götürür. - Temizlik betiklerinde altları üstlerden önce silin.
ORA-02292 örneği
Alt kayıtlar hangi tabloda?
SELECT owner, table_name
FROM all_constraints
WHERE constraint_name = 'FK_ORDERS_CUSTOMER';
Önce altlar, sonra üst:
DELETE FROM orders WHERE customer_id = 42;
DELETE FROM customers WHERE id = 42;
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-02291ORA-00054ORA-00001 Tüm Oracle hataları →
Oracle dokümantasyonu: ORA-02292. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.