Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL过程在创建时出错_Mysql_Procedure - Fatal编程技术网

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

在下面创建一个过程,它不断给出关于为第一个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、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