错误1064(42000):您的SQL语法有错误;检查手动mysql存储过程错误
我正在尝试mysql存储过程,但出现以下错误: 错误1064(42000):您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 使用near'的语法 为声明cur游标 从员工中选择出生日期 “在3号线 代码:错误1064(42000):您的SQL语法有错误;检查手动mysql存储过程错误,mysql,Mysql,我正在尝试mysql存储过程,但出现以下错误: 错误1064(42000):您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 使用near'的语法 为声明cur游标 从员工中选择出生日期 “在3号线 代码: 分隔符// 创建过程getminmaxbirthdate(OUT minage date,OUT maxage date) 开始 宣布迈索法尔、马克索法尔、策展人完成; 为声明cur游标 从员工中选择出生日期; 设置minsofar=2040-12-12; 设置maxso
分隔符//
创建过程getminmaxbirthdate(OUT minage date,OUT maxage date)
开始
宣布迈索法尔、马克索法尔、策展人完成;
为声明cur游标
从员工中选择出生日期;
设置minsofar=2040-12-12;
设置maxsofar=0;
设置完成=0;
找不到的声明继续处理程序
设置完成=1;
开放cur;
完成时=0执行
把生日带进牧师馆;
如果curage>maxsofar,则
设置maxsofar=curage;
如果结束;
如果教区
您的代码中有一些错误
- 没有类型的声明无效
- 只有在声明后才能设置
- 你的生日不是生日吗
delimiter //
create procedure getminmaxbirthdate(OUT minage date,OUT maxage date)
begin
DECLARE minsofar,maxsofar,curage,done VARCHAR(10);
DECLARE cur CURSOR for
select birth_date from employees;
DECLARE continue handler for not found
set done = 1;
set minsofar = 2040-12-12;
set maxsofar = 0;
set done = 0;
open cur;
while done = 0 do
fetch cur into curage;
if curage > maxsofar then
set maxsofar = curage;
end if;
if curage < minsofar then
set minsofar = curage;
end if;
end while;
close cur;
set minage = minsofar;
set maxage = maxsofar;
end //
delimiter ;
分隔符//
创建过程getminmaxbirthdate(OUT minage date,OUT maxage date)
开始
宣布米索法尔、马克索法尔、库拉奇、杜瓦查尔(10);
为声明cur游标
从员工中选择出生日期;
找不到的声明继续处理程序
设置完成=1;
设置minsofar=2040-12-12;
设置maxsofar=0;
设置完成=0;
开放cur;
完成时=0执行
把cur带进牧师室;
如果curage>maxsofar,则
设置maxsofar=curage;
如果结束;
如果教区 定界符代码>您的代码中有一些错误
- 没有类型的声明无效
- 只有在声明后才能设置
- 你的生日不是生日吗
您必须检查minsofar、maxsofar、curage、done的数据类型
存储过程:
delimiter //
create procedure getminmaxbirthdate(OUT minage date,OUT maxage date)
begin
DECLARE minsofar,maxsofar,curage,done VARCHAR(10);
DECLARE cur CURSOR for
select birth_date from employees;
DECLARE continue handler for not found
set done = 1;
set minsofar = 2040-12-12;
set maxsofar = 0;
set done = 0;
open cur;
while done = 0 do
fetch cur into curage;
if curage > maxsofar then
set maxsofar = curage;
end if;
if curage < minsofar then
set minsofar = curage;
end if;
end while;
close cur;
set minage = minsofar;
set maxage = maxsofar;
end //
delimiter ;
分隔符//
创建过程getminmaxbirthdate(OUT minage date,OUT maxage date)
开始
宣布米索法尔、马克索法尔、库拉奇、杜瓦查尔(10);
为声明cur游标
从员工中选择出生日期;
找不到的声明继续处理程序
设置完成=1;
设置minsofar=2040-12-12;
设置maxsofar=0;
设置完成=0;
开放cur;
完成时=0执行
把cur带进牧师室;
如果curage>maxsofar,则
设置maxsofar=curage;
如果结束;
如果教区
不使用简单查询有什么原因吗
select min(birth_date), max(birth_date)
from employee;
这可以合并到存储过程中,但这似乎是多余的。使用游标只是一种非常非常糟糕的做法——即使您正在学习SQL。应该避免使用游标,除非在必要的情况下——例如调用存储过程或为每行调用动态SQL
您的代码似乎也混淆了“年龄”和“日期”。有点不清楚您真正想要完成什么。您不使用简单查询有什么原因吗
select min(birth_date), max(birth_date)
from employee;
这可以合并到存储过程中,但这似乎是多余的。使用游标只是一种非常非常糟糕的做法——即使您正在学习SQL。应该避免使用游标,除非在必要的情况下——例如调用存储过程或为每行调用动态SQL
您的代码似乎也混淆了“年龄”和“日期”。有点不清楚您真正想要实现什么。为什么要使用存储过程来实现这一点?您可以通过直接的SQL查询获得所需的信息。@GMB我正在学习为什么要使用存储过程来实现这一点?您可以通过直接的SQL查询获得所需的信息。@GMB我只是在学习我只想输出最小年龄和最大年龄age@SugumarVenkatesan . . . 从最小和最大出生日期计算年龄。我只想输出最小年龄和最大年龄age@SugumarVenkatesan . . . 只需从最小和最大出生日期计算年龄。