目录
背景
今天学习到了MySQL存储过程的创建和使用,遇到了一点小坑
命令行小坑
一开始我使用的是命令行创建存储过程(该存储过程为返回数据表中最大年龄的用户id)
代码如下
DELIMITER //
CREATE PROCEDURE Largest_Age ( OUT Largest_ID INT )
BEGIN
DECLARE This_ID INT;
DECLARE This_Age INT;
DECLARE L_Age INT DEFAULT 0;
DECLARE L_ID INT;
DECLARE Done INT DEFAULT 0;
DECLARE C1 CURSOR FOR SELECT id,age FROM user;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done = 1;
OPEN C1;
REPEAT
FETCH C1 INTO This_ID , This_Age;
IF NOT Done THEN
IF This_Age > L_Age THEN
SET L_Age = This_Age;
SET L_ID = This_ID;
END IF;
END IF;
UNTIL Done END REPEAT;
CLOSE C1;
SET Largest_ID = L_ID;
END
//
数据表内容如下
按照以上代码一步一步敲,结果打完代码后出现了以下错误
没有选择数据库,尴尬,只好老老实实地选择数据库,然后一行一行重新输入
重新输入的话,可以直接使用↑键,快速回到你之前输入的代码中,然后再按回车键
调用存储过程,返回成功
Navicat小坑
使用F6创建命令列界面
输入存储过程代码,结果尴尬了,没打一半报错了
好像不允许使用DELIMITER 来修改结束标记?
接着,我不使用命令列界面,直接新建查询
执行
执行成功,再使用命令列界面调用存储过程
执行成功
总结
在使用命令行创建存储过程时
记得先选择数据库,再输入存储过程代码,否则会报一个'ERROR 1046 (3D000): No database selected'的错
在使用Navicat创建存储过程时
如果使用F6命令列界面,可能不支持DELIMITER来修改结束标记,建议直接新建查询来创建存储过程
学习没有捷径,一步一个脚印,加油!