MySql 存储过程 else if 和多查询

标签 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
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 ;

关于MySql 存储过程 else if 和多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14180344/

相关文章:

MySQL导入数据。我可以导入存储过程吗?

python - 'SELECT LAST_INSERT_ID()' 处的语法错误

php - 自动创建php页面

mysql - 如何使用 mysql FULLTEXT 在多个字段中使用 OR 进行 WHERE 搜索?

mysql - 编辑 mysql 表名以与一列的值组合(连接)

mysql - 如何在 OSX 上远程访问 MySQL 5.6

mysql - 错误 : Tablespace for table xxx exists. Please DISCARD the tablespace before IMPORT

php - 将 SELECT 结果划分到无 block html 页面

MYSQL 根据另一张表求和

sql - 动态 sql 与存储过程 - 优缺点?