zoukankan      html  css  js  c++  java
  • MySQL 存储过程例子,不能在if else里面用begin end否则会报错Error Code : 1064!

    Error Code : 1064
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

    报错是因为mysql的procedure里面if else语句里面, 用了begin end语句,去掉了就OK了.

    DELIMITER $$
    
    USE `sportgbmj`$$
    
    DROP PROCEDURE IF EXISTS `sp_web_addmiddayrank`$$
    
    CREATE DEFINER=`root`@`%` PROCEDURE `sp_web_addmiddayrank`()
    BEGIN
            /*
        修订记录:
        -------------------------------------------------------------------
        版本    修订人     修订日期      修订描述
        -------------------------------------------------------------------
        1.0.0            2013-06-15    查询当前中午12:30-13:30比赛排名
                                         该sp 当前比赛结束后执行
                                         排名先决条件:
                                         1:在一场内必须完满10(含)局以上
                                         
        ------------------------------------------------------------------- 
        */
        DECLARE i_date      DATE ;
        DECLARE i_starttime TIME;
        DECLARE i_endtime   TIME;
        
        SET i_date    = NOW();
        SET i_endtime = NOW();
        
        IF (i_endtime > '22:30') THEN
            BEGIN
                /* 夜间赛场 */
                SET i_starttime = '21:30';
                SET i_endtime   = '22:30';
            END
        ELSE
            BEGIN
                /* 中午场 */
                SET i_starttime = '12:30';
                SET i_endtime   = '13:30';
            END
        END IF;
    
        
        CREATE TEMPORARY TABLE tmp_rank(
            id INT NOT NULL AUTO_INCREMENT -- 自增
            ,userid INT                    -- 用户标识
            ,beans INT                     -- bean 汇总
            ,rounds TINYINT                -- 局数 汇总
            ,posttime TIME                 -- 时间 (该玩家本场比赛最后的时间)
        ) ENGINE = MYISAM;
        
        INSERT INTO tmp_rank (userid,beans,rounds,posttime)
        SELECT
            userid        
            ,SUM(CASE WHEN consume > 0 THEN consume ELSE 0 END) beans
            ,COUNT(userid) rounds
            ,MAX(posttime) AS posttime
        FROM 
            score AS S
        INNER JOIN 
            scorelist AS SL
        ON
            S.pid = SL.pid    
        WHERE  
            roomid IN ('1001') AND (postdate = i_date AND posttime >='12:30:00' AND posttime <='13:30:00')
        GROUP BY
            userid
        HAVING 
            (rounds >= 10)
        ORDER BY 
            beans DESC 
            ,maxtime ASC
        LIMIT 500;
        
        /* 
          插入排名表
        */
        INSERT INTO 
            hf_playranklist (userid,rank,beans,rounds,postdate,posttime) 
        SELECT 
            userid,beans,rounds,i_date,posttime 
        FROM tmp_rank;
        
        /*
          插入奖品表
        */
        INSERT INTO hf_prizelist (userid,STATUS,prizeid,receivetime,postdate)
        SELECT 
            userid
            ,0
            ,(CASE WHEN id >= 11 THEN 4
                  WHEN (id >= 3 AND id <= 10) THEN 3
                  WHEN id = 2 THEN 2
                  WHEN id = 1 THEN 1
             END) AS prizeid
            ,beans
            ,rounds
            ,posttime
        FROM 
            tmp_rank AS R 
        WHERE 
            rank >= 30;
        END$$
    
    DELIMITER ;


  • 相关阅读:
    12 KLT算法
    1- js vue.js
    复用代码
    计算两个日期相隔的天数(jodd)
    [转]ORA-00907: 缺失右括号
    [转]sql server 数据库日期格式化函数
    [Oralce]Oralce格式化日期
    myeclipse内存配置
    cookie 编码问题
    [转]Oracle 操作字符串的函数
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3141217.html
Copyright © 2011-2022 走看看