ORA-00936: missing expression
Oracle bir kolon, değer ya da ifade bekledi ama kullanılabilir bir şey bulamadı — çoğunlukla SELECT listesinde sonda kalmış ya da çift virgül, boş bir SELECT ya da değer olması gereken yerde bir anahtar sözcük.
Ne anlama gelir?
SQL’de pek çok yer bir ifade ister: SELECT listesi, karşılaştırmanın iki tarafı, fonksiyon argümanları, değer listeleri. Bu yerlerden biri boşsa ya da orada değer yerine bir anahtar sözcük varsa Oracle ifadeyi kuramaz ve ORA-00936 döndürür.
Yaygın nedenler
- SELECT listesinde
FROM’dan hemen önce virgül ya da art arda iki virgül. - Ardından hiçbir şey gelmeyen
SELECT; çoğunlukla sorgu düzenlenirken kalır. WHERE status =gibi yarım bir koşul.- Boş metinle değiştirilmiş bir bind ya da yerine koyma (substitution) değişkeni.
Nasıl çözülür?
- SELECT listesinde
FROM’dan hemen önce virgül kalıp kalmadığına bakın. WHEREveONiçindeki her karşılaştırmanın iki tarafında da değer olduğunu kontrol edin.- SQL üretiliyorsa çalıştırmadan önce yazdırıp üretilen parçalara bakın.
- Boş yeri bulmak için ifadeyi parça parça çalıştırın.
Örnek
FROM’dan önce kalan virgül:
-- ORA-00936
SELECT id, name, FROM customers;
-- Çalışır
SELECT id, name 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-00933ORA-00907ORA-00904 Tüm Oracle hataları →
Oracle dokümantasyonu: ORA-00936. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.