存儲過程建立報錯
CREATE PROCEDURE 'seckill'.'execute_seckill'(IN v_seckill_id bigint,IN v_phone bigint,IN v_kill_time TIMESTAMP ,out r_result INT )
BEGIN
?DECLARE insert_count INT DEFAULT 0;
?start TRANSACTION ;
?INSERT ignore INTO success_killed(seckill_id,user_phone,create_time) VALUES (v_seckill_id,v_phone,v_kill_time);
?SELECT ROW_COUNT() INTO insert_count;
?IF(insert_count==0) THEN
? ?ROLLBACK ;
? ?SET r_result=-1;
?ELSEIF(insert_count<0) THEN
? ?ROLLBACK ;
? ?SET r_result=-2;
?ELSE
? ? update seckill set number = number - 1
? ? ?where seckill_id = #{seckillId}
? ? ? and start_time <= #{killTime}
? ? ? and end_time >= #{killTime}
? ? ? and number > 0;
? ?SELECT ROW_COUNT() INTO insert_count;
? ?IF(insert_count==0) THEN
? ? ?ROLLBACK ;
? ? ?SET r_result=0;
? ?ELSEIF(insert_count<0) THEN
? ? ?ROLLBACK ;
? ? ?SET r_result=-2;
? ?ELSE
? ? ?COMMIT ;
? ? ?SET r_result=1;
? ?END IF;
?END IF;
END ;
$$
2018-05-23
樓上正解,反單引號用錯了,你一般看到“ERROR 1064 (42000): You have an error in your SQL syntax”,都是語法錯誤
2018-01-09
將存儲過程名上的單引號改為反單引號(ESC下面),就可以了
2017-09-11
去掉這個前綴"'seckill'."就OK了,你可能已經進到這個庫里了,不需要再加數據庫前綴了