2015-06-18 16 views
5

SQL yordamımla ilgili bir sorunum var. MySQLWorkbench, bana ilk SET'üme 'son'unu kaçıracağını, ancak ikinciyi değil tavsiye ettiğini söyledi. Nedenini bilmiyorum.SQL, eksik son, ama neden?

DELIMITER $ 
drop procedure if exists pay10percent$ 
create procedure pay10percent(IN montant decimal(9,2),IN idResa INT(5)) 
begin 
declare circuitid INT; 
SET circuitid = (
      SELECT IDCIRCUIT 
      FROM RESERVATION 
      WHERE IDRESERVATION=idResa 
      ); 
declare montantCircuit decimal(9,2); 
SET montantCircuit = (SELECT PRIX FROM CIRCUIT WHERE IDCIRCUIT=circuitid); 
end; 
$ 
DELIMITER ; 

Teşekkürler.

+0

siz "benim ilk SET bayan 'end'" ile neyi kastediyoruz? Bize tam hatayı söyler misiniz lütfen? – Kmeixner

+1

Hata, "Sözdizimi hatası: eksik 'son'". Eğer yürütürsem, SQL kod hatası: 1064 –

cevap

4

SET'u kullanmadan önce tüm değişkenleri bildirmelisiniz. Alternatif olarak, SET bırakın ve varsayılan değer olarak bu alt sorgu kullanabilirsiniz:

declare circuitid INT DEFAULT (
    SELECT IDCIRCUIT 
    FROM RESERVATION 
    WHERE IDRESERVATION=idResa 
); 
+1

Çok teşekkür ederim, işe yarıyor. Daha önce tüm değişkenleri bildirmeniz gerektiğini bilmiyordum. Çok teşekkürler! –

+0

Saklı bir yordamın en başında gelmesi gereken "deklare" nin olması gereken keyfi bir kısıtlamaya sahip olmak, hata iletisinde bunu bildirmemek için başka bir şeydir. :-( – oulenz

+0

Prosedür zorunlu değil, herhangi bir BEGIN .. END yapısı olabilir. Keyfi bir kısıtlama değildir: SQL standardı ve tüm SQL lehçeleri gerektirir. –

İlgili konular