ORA-00904: "COLUMN_NAME": invalid identifier
Oracle, ifadede kullanılan bir kolonu ya da adı bulamıyor. Çoğunlukla kolon adı yanlış yazılmıştır, başka bir tabloya aittir, tırnak içinde farklı büyük/küçük harfle oluşturulmuştur ya da WHERE içinde SELECT listesindeki bir takma ad kullanılmıştır.
Ne anlama gelir?
SQL ifadesindeki her tanımlayıcı Oracle’ın görebildiği bir kolona, takma ada ya da fonksiyona karşılık gelmelidir. Gelmediğinde Oracle onu tırnak içinde bildirir — örneğin "EMP_NAME": invalid identifier. Yani hangi adı kontrol etmeniz gerektiğini mesajın kendisi söyler.
Yaygın nedenler
- Yanlış yazılmış bir kolon adı ya da sorgudaki başka bir tabloda bulunan bir kolon.
- Çift tırnakla karışık büyük/küçük harfle oluşturulmuş (
"FirstName") ve tırnaksız sorgulanan kolon. - SELECT listesindeki bir takma adı henüz görünmediği
WHEREya daGROUP BYiçinde kullanmak. - Kolon adı olarak kullanılan bir ayrılmış sözcük ya da silinmiş veya adı değiştirilmiş bir kolon.
Nasıl çözülür?
- Kolon adlarını tam olarak kontrol edin:
DESC tablo_adiya daUSER_TAB_COLUMNS. - Kolon tırnakla oluşturulduysa aynı harf yapısıyla tırnak içinde sorgulayın — ya da adını büyük harfe çevirin.
WHEREiçinde takma ad yerine ifadenin kendisini yazın ya da sorguyu alt sorguya alıp dışarıda filtreleyin.- Join’lerde kolonları tablo takma adıyla niteleyin ki her ad doğru tabloya bağlansın.
Örnek
Takma ad WHERE içinde görünmez:
-- ORA-00904: "ANNUAL": invalid identifier
SELECT salary * 12 AS annual FROM employees WHERE annual > 100000;
-- Çalışır
SELECT * FROM (SELECT salary * 12 AS annual FROM employees)
WHERE annual > 100000;
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-00942ORA-00936ORA-00933 Tüm Oracle hataları →
Oracle dokümantasyonu: ORA-00904. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.