Oracle hataları

ORA-02292: integrity constraint violated - child record found

Bütünlük kısıtı ihlali — alt kayıt var

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?

ORA-02292 nasıl çözülür?

  1. Kısıt adıyla alt tabloyu ALL_CONSTRAINTS’te bulun.
  2. Altlara ne olacağına karar verin: önce silin ya da başka bir üst kayda taşıyın.
  3. Altlar her zaman üstle birlikte gitmeliyse foreign key’i ON DELETE CASCADE ile tanımlayın. İyi düşünün: tek bir silme o zaman çok daha fazlasını götürür.
  4. 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.