ORA-00907: missing right parenthesis
Ayrıştırıcı, kapanış parantezi beklediği bir noktaya geldi. Bazen gerçekten bir parantez eksiktir; ama çoğu zaman parantez içindeki bir şey orada kullanılamaz — IN alt sorgusu içinde ORDER BY ya da CREATE TABLE’da hatalı bir kolon tanımı gibi.
Ne anlama gelir?
Oracle ifadeyi soldan sağa okur. Açılan bir parantezin içindeki metin ayrıştırıcı için anlamsızlaştığında, o noktada kapanış parantezi beklediğini bildirir. Bu yüzden ORA-00907 çoğu zaman doğru görünen bir SQL’i gösterir: asıl sorun parantez içindeki ilk geçersiz öğedir.
Yaygın nedenler
- Uzun bir ifadede gerçekten eksik ya da fazla bir parantez.
IN ( … )ile kullanılan bir alt sorgunun içindeORDER BY.CREATE TABLE’da geçersiz bir veri tipi ya da kısıt tanımı; örneğin uzunluğu verilmemişVARCHAR2.- Bir listedeki öğeler arasında eksik virgül.
Nasıl çözülür?
- Parantezleri sayın; parantez eşleştirmesi yapan bir editörle bu hızlıca biter.
INiçindeki alt sorgulardanORDER BY’ı kaldırın; sıralamayı dış sorguda yapın.CREATE TABLE’daki kolon tanımlarını kontrol edin: herVARCHAR2uzunluk ister, kısıtların sözdizimi doğru olmalıdır.- Hata kaybolana kadar ifadeyi adım adım kısaltın — en son çıkardığınız parça sorunu içerir.
Örnek
IN içinde ORDER BY kullanılamaz:
-- ORA-00907
SELECT * FROM orders
WHERE customer_id IN (SELECT id FROM customers ORDER BY name);
-- Çalışır
SELECT * FROM orders
WHERE customer_id IN (SELECT id FROM customers);
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-00936ORA-00933ORA-00904 Tüm Oracle hataları →
Oracle dokümantasyonu: ORA-00907. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.