MySql存储过程else if和多查询

MySql存储过程else if和多查询,mysql,stored-procedures,navicat,Mysql,Stored Procedures,Navicat,在以下存储过程中,我遇到了一个错误: 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 W

在以下存储过程中,我遇到了一个错误:

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;
遇到的错误是:

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

解决此错误的最佳解决方案是什么?

pFileID
定义为
IN
参数,例如

CREATE PROCEDURE SP_DeleteFileInfo(IN pFileID int)
完整查询

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 ;

我不得不添加一个附加的“End IF”来覆盖“Else IF”语句 完整查询应如下所示:

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;

您有多个语法错误

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 ;
你得到了这个错误

[SQL]从fileinfo中选择fileinfo.ReferenceID到@FileRef中,其中 fileinfo.FileID=pFileID;[Err]1054-中的未知列“pFileID” “where子句”

因为您创建的存储过程如下所示

CREATE  PROCEDURE `SP_DeleteFileInfo`(pFileID int)
Set @FileRef= null;
所有其他语句都是正常的单语句,因此
pFileID
在此上下文中是未知的

只要自己尝试一下这个select语句,就会得到同样的错误

select filesinfo.ReferenceID into @FileRef FROM filesinfo where filesinfo.FileID =pFileID;

我知道,但我仍然面临同样的问题。我是否需要添加**开始/结束**条款?如果有的话?25秒前的SP–user1915102编辑器中的查询我该如何处理?查看我的更新答案,需要添加
开始/结束
并更改
分隔符
,但现在我面临此错误“您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解第17行“抱歉
&&
具有特殊含义”附近使用“&&DELIMITER”的正确语法。将其改为
/
。我给了您一些提示,但错误仍然存在,并带有新符号:“您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第17行“//DELIMITER”附近使用的正确语法“如果实际为ELSEIF(@FileRef不是null),则其他之间不应存在空格”,然后