在以下存储过程中,我遇到了错误:
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'**
解决此错误的最佳解决方案是什么?
答案 0 :(得分:8)
将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 ;
答案 1 :(得分:0)
我必须添加额外的“结束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;
答案 2 :(得分:0)
您有多个语法错误
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] select filesinfo.ReferenceID into @FileRef FROM filesinfo where filesinfo.FileID = pFileID; [错误] 1054 - 未知列'pFileID' 'where clause'
因为您创建的存储过程是
CREATE PROCEDURE `SP_DeleteFileInfo`(pFileID int)
Set @FileRef= null;
所有其他陈述都是正常的单一陈述,因此{1}}在此背景下是未知的。
自己单独尝试这个select语句,你会得到同样的错误。
pFileID