ORA-00933: SQL command not properly ended
Oracle, ifadenin bittiğini düşündüğü yerden sonra metin buldu. Yaygın nedenler: dinamik SQL’de sondaki noktalı virgül, tablo takma adından önce AS anahtar sözcüğü ya da yanlış yere konmuş bir cümlecik.
Ne anlama gelir?
Ayrıştırıcı ifadenin tamamlandığına karar verdi ama arkasından başka metin geldi. Oracle, tanıdığı ifadeye sığdıramadığı hiçbir şeyi kabul etmez; ilk beklenmeyen sözcükte ORA-00933 ile durur.
Yaygın nedenler
EXECUTE IMMEDIATE’e verilen ya da bir uygulama sürücüsünün gönderdiği metnin içindeki noktalı virgül.- Tablo takma adından önce
AS(FROM employees AS e) — Oracle AS’i yalnızca kolon takma adlarında kabul eder. - Desteklemeyen bir ifadede
ORDER BY; örneğin bazıINSERT … SELECTya daUPDATEbiçimleri. - Başka bir veritabanının sözdizimi:
LIMIT 10ya daUPDATE … FROMgibi.
Nasıl çözülür?
- Sürücülere ya da
EXECUTE IMMEDIATE’e verilen SQL’in sonundaki noktalı virgülü kaldırın (PL/SQL bloklarıEND;’ini korur). - Tablo takma adlarından önceki
AS’i silin. - Oracle dışı sözdizimini değiştirin:
LIMITyerineFETCH FIRST n ROWS ONLY(12c ve sonrası),UPDATE … FROMyerineMERGEya da ilişkili alt sorgu. - İfadenin bitmesi gereken yerden hemen sonraki sözcüğe bakın.
Örnek
Oracle’da tablo takma adı AS almaz:
-- ORA-00933
SELECT e.name FROM employees AS e;
-- Çalışır
SELECT e.name FROM employees e;
Dinamik SQL’in içinde noktalı virgül olmaz:
EXECUTE IMMEDIATE 'DELETE FROM tmp_orders'; -- 'DELETE FROM tmp_orders;' değil
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-00907ORA-00904 Tüm Oracle hataları →
Oracle dokümantasyonu: ORA-00933. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.