2013-01-06 29 views
5

Trong thủ tục lưu trữ sau tôi gặp phải một lỗi:MySql thủ tục lưu trữ else if và truy vấn đa

DROP PROCEDURE IF EXISTS `SP_DeleteFileInfo`; 
CREATE PROCEDURE `SP_DeleteFileInfo`(pFileID int) 
Set @FileRef= null; 
select filesinfo.ReferenceID into @FileRef FROM filesinfo where filesinfo.FileID =pFileID; 
DELETE From filesinfo 
WHERE filesinfo.FileID= pFileID; 
IF EXISTS(SELECT * from filesrefrences where filesrefrences.ReferenceID= @FileRef and filesrefrences.RefrenceCount>1) then 
    update filesrefrences 
    set 
     filesrefrences.RefrenceCount= filesrefrences.RefrenceCount-1 
    where 
     filesrefrences.ReferenceID= @FileRef; 
    SELECT @FileRef; 
ELSE IF(@FileRef is Not NULL) THEN 
    DELETE from filesrefrences WHERE filesrefrences.ReferenceID = @FileRef; 
    SELECT -77; 
ELSE 
    SELECT -99; 
end if; 

Các lỗi gặp phải là:

[SQL] 
select filesinfo.ReferenceID into @FileRef FROM filesinfo where filesinfo.FileID =pFileID; 
[Err] 1054 - **Unknown column 'pFileID' in 'where clause'** 

Điều gì sẽ là giải pháp tốt nhất để giải quyết việc này lỗi?

Trả lời

0

tôi phải bổ sung thêm một "End NẾU" để trang trải "if" tuyên bố truy vấn đầy đủ sẽ như sau:

CREATE PROCEDURE `SP_DeleteFileInfo`(IN pFileID int) 
BEGIN  
Set @FileRef= null; 
    select filesinfo.ReferenceID into @FileRef FROM filesinfo where filesinfo.FileID =pFileID; 
    DELETE From filesinfo WHERE filesinfo.FileID= pFileID; 
    IF EXISTS(SELECT * from filesrefrences where filesrefrences.ReferenceID= @FileRef and filesrefrences.RefrenceCount>1) then 
     update filesrefrences 
     set filesrefrences.RefrenceCount= filesrefrences.RefrenceCount-1 
     where filesrefrences.ReferenceID= @FileRef; 
     SELECT @FileRef; 
    ELSE IF(@FileRef is Not NULL) THEN 
     DELETE from filesrefrences WHERE filesrefrences.ReferenceID = @FileRef; 
     SELECT -77; 
    ELSE 
     SELECT -99; 
    end if; 
end if; 
END; 
+1

không nên có khoảng cách giữa ELSE NẾU thực sự nó phải là ELSEIF (@ FileRef không phải là null) THEN – Riz

8

xác định pFileID như IN tham số, ví dụ:

CREATE PROCEDURE SP_DeleteFileInfo(IN pFileID int) 

đầy đủ truy vấn,

DROP PROCEDURE IF EXISTS `SP_DeleteFileInfo`; 
DELIMITER // 
CREATE PROCEDURE `SP_DeleteFileInfo`(IN pFileID int) 
BEGIN 
    Set @FileRef= null; 
    select filesinfo.ReferenceID into @FileRef FROM filesinfo where filesinfo.FileID =pFileID; 
    DELETE From filesinfo WHERE filesinfo.FileID= pFileID; 
    IF EXISTS(SELECT * from filesrefrences where filesrefrences.ReferenceID= @FileRef and filesrefrences.RefrenceCount>1) then 
     update filesrefrences 
     set filesrefrences.RefrenceCount= filesrefrences.RefrenceCount-1 
     where filesrefrences.ReferenceID= @FileRef; 
     SELECT @FileRef; 
    ELSE 
     IF(@FileRef is Not NULL) THEN 
      DELETE from filesrefrences WHERE filesrefrences.ReferenceID = @FileRef; 
      SELECT -77; 
     ELSE 
      SELECT -99; 
     END IF; 
    END IF; 
END // 
DELIMITER ; 
+0

Tôi làm, nhưng tôi vẫn gặp phải vấn đề tương tự. tôi có cần thêm các mệnh đề ** begin/End ** không? Nếu có ? làm thế nào tôi có thể làm điều đó để trang trải các truy vấn trong SP - user1915102 25 giây trước chỉnh sửa –

+1

xem câu trả lời cập nhật của tôi, cần phải thêm 'BEGIN/END' và thay đổi' DELIMITER' –

+0

Tôi thấy, nhưng bây giờ tôi phải đối mặt với lỗi này " Bạn có lỗi trong cú pháp SQL của mình, hãy kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp đúng để sử dụng gần '&& DELIMITER' ở dòng 17 " –

0

Bạn có nhiều hơn một lỗi cú pháp

DROP PROCEDURE IF EXISTS `SP_DeleteFileInfo`; 
-- MISSING DELIMITER // 
CREATE PROCEDURE `SP_DeleteFileInfo`(pFileID int) 
-- MISSING BEGIN 
    Set @FileRef= null; 
    select filesinfo.ReferenceID into @FileRef FROM filesinfo where filesinfo.FileID =pFileID; 
    DELETE From filesinfo 
    WHERE filesinfo.FileID= pFileID; 
    IF 
    EXISTS(SELECT * from filesrefrences where filesrefrences.ReferenceID= @FileRef and filesrefrences.RefrenceCount>1) 
    then 
    update filesrefrences 
    set 
     filesrefrences.RefrenceCount= filesrefrences.RefrenceCount-1 
    where 
     filesrefrences.ReferenceID= @FileRef; 
    SELECT @FileRef; 
    ELSE 
    IF 
     (@FileRef is Not NULL) 
    THEN 
     DELETE from filesrefrences WHERE filesrefrences.ReferenceID = @FileRef; 
     SELECT -77; 
    ELSE 
     SELECT -99; 
    end if; 
-- MISSING END IF; 
-- MISSING END// 
-- MISSING DELIMITER ; 

Và bạn nhận được lỗi này

[SQL] select filesinfo.ReferenceID into @FileRef FROM filesinfo where filesinfo.FileID =pFileID; [Err] 1054 - Unknown column 'pFileID' in 'where clause'

vì Stored Procedure bạn tạo là này

CREATE PROCEDURE `SP_DeleteFileInfo`(pFileID int) 
Set @FileRef= null; 

Tất cả các báo cáo khác là bình thường các câu lệnh đơn và có pFileID không được biết đến trong ngữ cảnh này.

Chỉ cần thử câu lệnh chọn này độc lập và bạn sẽ gặp lỗi tương tự.

select filesinfo.ReferenceID into @FileRef FROM filesinfo where filesinfo.FileID =pFileID; 
Các vấn đề liên quan