[英]MySQL 5.6.21 Stored procedure SQL error 1064
I have this query which works fine and giving the expected result. 我有这个查询,可以正常工作,并给出预期的结果。
SELECT count(*) AS total_unsolved,
(select count(deadline) from my_table where datediff(deadline, CURTIME()) = 0 and response_time is null) as today_to_solve,
(select count(deadline) from my_table where datediff(deadline, CURTIME()) > 0 and datediff(deadline, CURTIME()) < 4 and response_time is null) as days_left_1_3,
(select count(deadline) from my_table where datediff(deadline, CURTIME()) > 3 and datediff(deadline, CURTIME()) < 8 and response_time is null) as days_left_4_7,
(select count(deadline) from my_table where datediff(deadline, CURTIME()) > 7 and response_time is null) as mt_week,
(select count(deadline) from my_table where datediff(deadline, CURTIME()) < 0 and datediff(deadline, CURTIME()) > -4 and response_time is null) as overdue_1_3_days,
(select count(deadline) from my_table where datediff(deadline, CURTIME()) < -3 and datediff(deadline, CURTIME()) > -11 and response_time is null) as overdue_4_10_days,
(select count(deadline) from my_table where datediff(deadline, CURTIME()) < -10 and datediff(deadline, CURTIME()) > -30 and response_time is null) as overdue_11_30_days,
(select count(deadline) from my_table where datediff(deadline, CURTIME()) < -30 and response_time is null) as overdue_mt_month,
(select count(deadline) from my_table where datediff(deadline, response_time) < 0 and response_time is not null) as solved_with_delay
from my_table where response_time is null
I would like to create a procedure that shows the result in a given time range. 我想创建一个过程来显示给定时间范围内的结果。 So I typed the following:
所以我输入了以下内容:
CREATE PROCEDURE status_in_timerange
(
IN start_date TiMESTAMP,
IN close_date TiMESTAMP,
OUT total_unsolved INT,
OUT today_to_solve INT,
OUT days_left_1_3 INT,
OUT days_left_4_7 INT,
OUT mt_week INT,
OUT overdue_1_3_days INT,
OUT overdue_4_10_days INT,
OUT overdue_11_30_days INT,
OUT overdue_mt_month INT,
OUT solved_with_delay INT
)
BEGIN
SELECT count(DATEDIFF(deadline, NOW())) AS total_unsolved,
(select count(deadline) from my_table where datediff(deadline, CURTIME()) = 0 and response_time is null and ktimestamp BETWEEN start_date and close_date),
(select count(deadline) from my_table where datediff(deadline, CURTIME()) > 0 and datediff(deadline, CURTIME()) < 4 and response_time is null and ktimestamp BETWEEN start_date and close_date),
(select count(deadline) from my_table where datediff(deadline, CURTIME()) > 3 and datediff(deadline, CURTIME()) < 8 and response_time is null and ktimestamp BETWEEN start_date and close_date),
(select count(deadline) from my_table where datediff(deadline, CURTIME()) > 7 and response_time is null and ktimestamp BETWEEN start_date and close_date),
(select count(deadline) from my_table where datediff(deadline, CURTIME()) < 0 and datediff(deadline, CURTIME()) > -4 and response_time is null and ktimestamp BETWEEN start_date and close_date),
(select count(deadline) from my_table where datediff(deadline, CURTIME()) < -3 and datediff(deadline, CURTIME()) > -11 and response_time is null and ktimestamp BETWEEN start_date and close_date),
(select count(deadline) from my_table where datediff(deadline, CURTIME()) < -10 and datediff(deadline, CURTIME()) > -30 and response_time is null and ktimestamp BETWEEN start_date and close_date),
(select count(deadline) from my_table where datediff(deadline, CURTIME()) < -30 and response_time is null and ktimestamp BETWEEN start_date and close_date),
(select count(deadline) from my_table where datediff(deadline, response_time) < 0 and response_time is not null and ktimestamp BETWEEN start_date and close_date)
INTO total_unsolved ,
today_to_solve,
days_left_1_3,
days_left_4_7,
mt_week,
overdue_1_3_days ,
overdue_4_10_days,
overdue_11_30_days,
overdue_mt_month,
solved_with_delay
FROM my_table WHERE response_time is null and ktimestamp BETWEEN start_date and close_date
END ;
Unfortunately, this query is showing an error as below: 不幸的是,此查询显示如下错误:
SQL Error (1064): You have an error in your SQL syntax;
SQL错误(1064):您的SQL语法有错误; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 41
检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第41行的“ END”附近使用
I have read related questions (including the following) which didn't help to solve the issue. 我已经阅读了相关问题(包括以下内容),这些问题无助于解决问题。
Mysql stored procedure error MySQL存储过程错误
Mysql stored procedure error 1064 MySQL存储过程错误1064
PS select version();
PS
select version();
returns 5.6.21 返回5.6.21
Try: 尝试:
mysql> DELIMITER //
mysql> CREATE PROCEDURE status_in_timerange
-> (
-> IN start_date TiMESTAMP,
-> IN close_date TiMESTAMP,
-> OUT total_unsolved INT,
-> OUT today_to_solve INT,
-> OUT days_left_1_3 INT,
-> OUT days_left_4_7 INT,
-> OUT mt_week INT,
-> OUT overdue_1_3_days INT,
-> OUT overdue_4_10_days INT,
-> OUT overdue_11_30_days INT,
-> OUT overdue_mt_month INT,
-> OUT solved_with_delay INT
-> )
-> BEGIN
-> SELECT count(DATEDIFF(deadline, NOW())) AS total_unsolved,
-> (select count(deadline) from my_table where datediff(deadline, CURTIME()) = 0 and response_time is null and ktimestamp BETWEEN start_date and close_date),
-> (select count(deadline) from my_table where datediff(deadline, CURTIME()) > 0 and datediff(deadline, CURTIME()) < 4 and response_time is null and ktimestamp BETWEEN start_date and close_date),
-> (select count(deadline) from my_table where datediff(deadline, CURTIME()) > 3 and datediff(deadline, CURTIME()) < 8 and response_time is null and ktimestamp BETWEEN start_date and close_date),
-> (select count(deadline) from my_table where datediff(deadline, CURTIME()) > 7 and response_time is null and ktimestamp BETWEEN start_date and close_date),
-> (select count(deadline) from my_table where datediff(deadline, CURTIME()) < 0 and datediff(deadline, CURTIME()) > -4 and response_time is null and ktimestamp BETWEEN start_date and close_date),
-> (select count(deadline) from my_table where datediff(deadline, CURTIME()) < -3 and datediff(deadline, CURTIME()) > -11 and response_time is null and ktimestamp BETWEEN start_date and close_date),
-> (select count(deadline) from my_table where datediff(deadline, CURTIME()) < -10 and datediff(deadline, CURTIME()) > -30 and response_time is null and ktimestamp BETWEEN start_date and close_date),
-> (select count(deadline) from my_table where datediff(deadline, CURTIME()) < -30 and response_time is null and ktimestamp BETWEEN start_date and close_date),
-> (select count(deadline) from my_table where datediff(deadline, response_time) < 0 and response_time is not null and ktimestamp BETWEEN start_date and close_date)
-> INTO total_unsolved ,
-> today_to_solve,
-> days_left_1_3,
-> days_left_4_7,
-> mt_week,
-> overdue_1_3_days ,
-> overdue_4_10_days,
-> overdue_11_30_days,
-> overdue_mt_month,
-> solved_with_delay
-> FROM my_table
-> WHERE response_time is null and
-> ktimestamp BETWEEN start_date and close_date;
-> END//
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.