MySQL过程在创建时出错
在下面创建一个过程,它不断给出关于为第一个select语句赋值的信息,我是否完全错了,非常感谢您的帮助 错误1064(42000):您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便在“:=MySQL过程在创建时出错,mysql,procedure,Mysql,Procedure,在下面创建一个过程,它不断给出关于为第一个select语句赋值的信息,我是否完全错了,非常感谢您的帮助 错误1064(42000):您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便在“:=m”附近使用正确的语法 id,vCurrentVote:=td_投票的投票,其中id=pCid限制1 CREATE PROCEDURE pr_update_vote(在pCid INT、pVote INT、pMid INT、OUT pNewVote INT中) 开始 声明vMid、vVote
m”附近使用正确的语法
id
,vCurrentVote:=td_投票的投票,其中id=pCid限制1
CREATE PROCEDURE pr_update_vote(在pCid INT、pVote INT、pMid INT、OUT pNewVote INT中)
开始
声明vMid、vVote、vCurrentVote、vNewVote INT;
如果pVote=1,则
设置vVote=1;
其他的
设置vVote=-1;
如果结束;
选择vMid:=`mid`,vCurrentVote:=来自td_投票的投票,其中id=pCid限制1;
如果vMid pMid那么
选择vVoteType:=投票
来自td_的投票
其中`mid`=vMid
和cid=pCid
限值1;
如果vVoteType不为NULL或vVoteType vVote,则
更新运输署署长投票
投票表决,
updated=NOW()
其中cid=pCid
和'mid`=pMid
限值1;
其他的
插入td_投票(`mid`,cid,投票)
数值(pMid、pCid、vVote);
如果结束;
vNewVote=vCurrentVote+vVote;
更新运输署署长
设置投票=vNewVote
其中id=pCid
限值1;
选择pNewVote:=从td_投票中投票,其中id=pCid限制1;
如果结束;
结束
这是经过大量调试后对我有效的解决方案
CREATE PROCEDURE pr_update_vote (IN pCid INT, IN pVote INT, IN pMid INT, OUT pNewVote INT)
BEGIN
DECLARE vMid, vVote, vCurrentVote, vNewVote INT;
IF pVote = 1 THEN
SET vVote = 1;
ELSE
SET vVote = -1;
END IF;
SELECT vMid = `mid`, vCurrentVote = vote FROM td_voted WHERE id = pCid LIMIT 1;
IF vMid <> pMid THEN
SELECT vVoteType = vote
FROM td_votes
WHERE `mid` = vMid
AND cid = pCid
LIMIT 1;
IF (vVoteType IS NOT NULL) OR (vVoteType <> vVote) THEN
UPDATE td_votes
SET vote = vVote,
updated = NOW()
WHERE cid = pCid
AND `mid` = pMid
LIMIT 1;
ELSE
INSERT INTO td_votes (`mid`, cid, vote)
VALUES (pMid, pCid, vVote);
END IF;
SET vNewVote = vCurrentVote + vVote;
UPDATE td_voted
SET vote = vNewVote
WHERE id = pCid
LIMIT 1;
SELECT pNewVote = vote FROM td_voted WHERE id = pCid LIMIT 1;
END IF;
END
CREATE PROCEDURE pr_update_vote(在pCid INT、pVote INT、pMid INT、OUT pNewVote INT中)
开始
声明vMid、vVote、vCurrentVote、vNewVote INT;
如果pVote=1,则
设置vVote=1;
其他的
设置vVote=-1;
如果结束;
选择vMid=`mid`,vCurrentVote=来自td_投票的投票,其中id=pCid限制1;
如果vMid pMid那么
选择vVoteType=vote
来自td_的投票
其中`mid`=vMid
和cid=pCid
限值1;
如果(vVoteType不为NULL)或(vVoteType vVote),则
更新运输署署长投票
投票表决,
updated=NOW()
其中cid=pCid
和'mid`=pMid
限值1;
其他的
插入td_投票(`mid`,cid,投票)
数值(pMid、pCid、vVote);
如果结束;
设置vNewVote=vCurrentVote+vVote;
更新运输署署长
设置投票=vNewVote
其中id=pCid
限值1;
从td_投票中选择pNewVote=投票,其中id=pCid限制1;
如果结束;
结束
解决了它,用有效的解决方案更新了问题。不要用你的解决方案更新问题,而是将你自己的答案添加为找到的解决方案并勾选。@Ravinder,完成,谢谢你的建议。
CREATE PROCEDURE pr_update_vote (IN pCid INT, IN pVote INT, IN pMid INT, OUT pNewVote INT)
BEGIN
DECLARE vMid, vVote, vCurrentVote, vNewVote INT;
IF pVote = 1 THEN
SET vVote = 1;
ELSE
SET vVote = -1;
END IF;
SELECT vMid = `mid`, vCurrentVote = vote FROM td_voted WHERE id = pCid LIMIT 1;
IF vMid <> pMid THEN
SELECT vVoteType = vote
FROM td_votes
WHERE `mid` = vMid
AND cid = pCid
LIMIT 1;
IF (vVoteType IS NOT NULL) OR (vVoteType <> vVote) THEN
UPDATE td_votes
SET vote = vVote,
updated = NOW()
WHERE cid = pCid
AND `mid` = pMid
LIMIT 1;
ELSE
INSERT INTO td_votes (`mid`, cid, vote)
VALUES (pMid, pCid, vVote);
END IF;
SET vNewVote = vCurrentVote + vVote;
UPDATE td_voted
SET vote = vNewVote
WHERE id = pCid
LIMIT 1;
SELECT pNewVote = vote FROM td_voted WHERE id = pCid LIMIT 1;
END IF;
END