2011-10-24 51 views
7

im cố gắng để tạo ra một thủ tục lưu trữ có bội CÁO TRƯỜNG HỢP Tôi đã thủ tục lưu trữ sau đây:Mysql TRƯỜNG HỢP KHÔNG TÌM THẤY cho trường hợp tuyên bố trên một Stored Procedure

BEGIN 
CASE @olds 
WHEN 'emp' THEN 
    CASE @news 
    WHEN 'loc' THEN 
     UPDATE equipos SET pe=pe-1,pg=pg+1 WHERE [email protected]; 
     UPDATE equipos SET pe=pe-1,pp=pp+1 WHERE [email protected]; 
     UPDATE partidos SET `eqgan`[email protected] WHERE [email protected]; 
     UPDATE log_partidos SET `status`[email protected] WHERE `match`[email protected]; 
    WHEN 'vis' THEN 
     UPDATE equipos SET pe=pe-1,pg=pg+1 WHERE [email protected]; 
     UPDATE equipos SET pe=pe-1,pp=pp+1 WHERE [email protected]; 
     UPDATE partidos SET `eqgan`[email protected] WHERE [email protected]; 
     UPDATE log_partidos SET `status`[email protected] WHERE `match`[email protected]; 
    END CASE; 
WHEN 'loc' THEN 
    CASE @news 
    WHEN 'emp' THEN 
     UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE [email protected]; 
     UPDATE equipos SET pe=pe+1,pp=pp-1 WHERE [email protected]; 
     UPDATE partidos SET `eqgan`[email protected] WHERE [email protected]; 
     UPDATE log_partidos SET `status`[email protected] WHERE `match`[email protected]; 
    WHEN 'vis' THEN 
     UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE [email protected]; 
     UPDATE equipos SET pg=pg-1,pp=pp+1 WHERE [email protected]; 
     UPDATE partidos SET `eqgan`[email protected] WHERE [email protected]; 
     UPDATE log_partidos SET `status`[email protected] WHERE `match`[email protected]; 
    END CASE; 
WHEN 'vis' THEN 
    CASE @news 
    WHEN 'emp' THEN 
     UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE [email protected]; 
     UPDATE equipos SET pe=pe+1,pp=pp-1 WHERE [email protected]; 
     UPDATE partidos SET `eqgan`[email protected] WHERE [email protected]; 
     UPDATE log_partidos SET `status`[email protected] WHERE `match`[email protected]; 
    WHEN 'loc' THEN 
     UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE [email protected]; 
     UPDATE equipos SET pg=pg-1,pp=pp+1 WHERE [email protected]; 
     UPDATE partidos SET `eqgan`[email protected] WHERE [email protected]; 
     UPDATE log_partidos SET `status`[email protected] WHERE `match`[email protected]; 
    END CASE; 
END CASE; 
END 

Mỗi lần im thực hiện thủ tục này tôi đã nhận sau lỗi là: "Trường hợp không được tìm thấy cho câu lệnh CASE" Tôi đang làm gì sai?

+1

Có tìm một trường hợp không có trong câu lệnh WHEN của bạn? Bạn đã thử thêm ELSE vào báo cáo của bạn để xem liệu nó có rơi qua bất kỳ đâu không? – Genzume

Trả lời

0

Lỗi đó có nghĩa là một trong các câu lệnh 'trường hợp' không thể tìm thấy kết quả phù hợp. Bạn có chắc chắn các biến cũ và tin tức chứa các giá trị đúng không? Cố gắng thay đổi 'khi nào' cuối cùng trong từng trường hợp thành 'else' và xem liệu thủ tục của bạn có hoạt động không.

17

Đây là một vấn đề cụ thể của MySQL.
Trong MySQL, một trường hợp phải luôn luôn có một kết hợp hợp lệ, do đó một mệnh đề ELSE.
Và như các tuyên bố sau trận đấu không thể để trống, bạn có thể điền vào nó với một khối trống rỗng như vậy:

ELSE BEGIN END; 

Vì vậy, một trường hợp hợp lệ sẽ được, ví dụ:

CASE @news 
    WHEN 'emp' THEN 
    UPDATE equipos SET pe=pe+1,pg=pg-1 WHERE [email protected]; 
    WHEN 'loc' THEN 
    UPDATE equipos SET pp=pp-1,pg=pg+1 WHERE [email protected]; 
    ELSE BEGIN END; 
END CASE; 
Các vấn đề liên quan