2015-06-13 17 views
7

Eksik ben çok basit bir tablo oluşturdu Bu hata:Oracle sorguyu tanımlayan

Error starting at line : 1 in command - 
DECLARE 
    whatever varchar2(20) := :bananas; 
BEGIN 
    MERGE INTO tmp2 t USING 
    (SELECT whatever AS this_id FROM DUAL) d 
    ON (t.id = d.this_id) 
    WHEN NOT MATCHED THEN 
     INSERT (id) VALUES (d.this_id); 
END; 
Error report - 
Missing defines 

Ne istediğini anlama şansım olmadı. ': Muz' yerine 'a' gibi bir değer alırsam çalışır, ancak bir değişken kullandığımda ve değeri bağladığımda değil. Sorgumda neyin yanlış olduğunu bilen var mı? Teşekkürler.

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 
PL/SQL Release 11.2.0.4.0 - Production 
"CORE 11.2.0.4.0 Production" 
TNS for IBM/AIX RISC System/6000: Version 11.2.0.4.0 - Production 
NLSRTL Version 11.2.0.4.0 - Production 

düzenlemek: Sadece hata

+1

Nedir:: muzlar? Bu kod saklı bir prosedürde mi? Parametrenin tanımlanması gerekiyor. –

+0

Sadece bir değişken için herhangi bir isim kullanıyordum. Bunu clobs ile bir sorgu olarak yürütmek istiyorum, ancak bu sorunu "Eksik tanımları" ile her zaman görüyordum ve sorunumun daralmasına kadar birçok kodumu kaldırmaya çalışıyordum. –

+0

Yorumunuzu yeniden okuyun, Oracle SQL Developer'da "Enter Binds" penceresini kullanarak ekran görüntüsünde tanımlanır –

cevap

1

deneyin ekstresinde sonra çizgi ekleyerek gerçi ... hata güçlükler yaşanmaktadır düzgün birleştirilen verileri engelleyen olmadığını fark ettik kendi çizgisi. Sonra tüm bloğu vurgulayın ve F5 tuşuna basın.

1

Olası olarak DECLARE bölümünü hep birlikte atla ve her yerde kullan: muzlarım her neyse yerine. BEGIN'in koymasından sonra: bananas: =: bananas; ve hiçbir hata alamazsınız. İyi şanslar.

0

Aynı hata mesajını aldım. DB sütümüm 32 karakterlik (VARCHAR2(32 CHAR)) idi ve filtre için bildirilen değişken 64 karakterlik (szId varchar2(32) := :Id;) idi. Girdi değişkeni olarak bir değer kopyaladım ve yapıştırdım. Nedense sonunda beyaz boşluk var. Böylece 33 karakterim var ve hatalardan bahsetmiştim. 32 karakterlik beyanımı yaptım ve daha anlamlı bir hata almaya başladım.

Sizin durumunuz DB sütununuz VARCHAR2(20 BYTE) ve bildirimi whatever varchar2(20) := :bananas;. Toplam boyutta byte'un char olmadığını görünebilir.