2015-06-18 15 views
5

Tôi gặp sự cố với quy trình SQL của mình. MySQLWorkbench khuyên tôi rằng nó bỏ lỡ 'kết thúc' với SET đầu tiên của tôi, nhưng không phải cho lần thứ hai. Tôi không biết tại sao.SQL, kết thúc bị thiếu, nhưng tại sao?

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 ; 

Cảm ơn.

+0

Bạn có ý nghĩa gì khi "bỏ lỡ" kết thúc với SET đầu tiên của tôi "? Bạn có thể cho chúng tôi biết lỗi chính xác được không? – Kmeixner

+1

Lỗi là "Lỗi cú pháp: thiếu 'kết thúc'". Nếu tôi thực hiện, lỗi mã SQL: 1064 –

Trả lời

4

Bạn phải khai báo tất cả các biến trước khi sử dụng SET. Ngoài ra, bạn có thể thả SET và sử dụng truy vấn con đó làm giá trị mặc định:

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

Cảm ơn bạn rất nhiều, nó hoạt động. Tôi không biết rằng bạn phải khai báo tất cả các biến trước đó. Cảm ơn rất nhiều! –

+0

Có một điều để có một hạn chế tùy ý rằng 'khai báo' phải đến lúc bắt đầu của một thủ tục lưu sẵn, đó là một điều khác để không truyền đạt điều này trong thông báo lỗi. :-( – oulenz

+0

Không nhất thiết phải là thủ tục, nó có thể là bất kỳ BEGIN .. END xây dựng.Không phải là một hạn chế tùy ý: nó đòi hỏi phải có tiêu chuẩn SQL và tất cả các phương ngữ SQL. –

Các vấn đề liên quan