MySql存储过程游标、函数
一、游标
1、格式
-- 声明语法 declare cursor_name cursor for select_statement -- 打开语法 open cursor_name -- 取值语法 fetch cursor_name int vat_neme 【,var_name】... -- 关闭语法 close cursor_name
2、操作
DROP PROCEDURE IF EXISTS proc1; delimiter $$ create procedure proc1() begin -- 定义局部变量 DECLARE var_user_name VARCHAR(20); DECLARE var_sex VARCHAR(20); DECLARE i int DEFAULT 0; DECLARE num int; -- 声明游标 DECLARE my_cursor cursor for SELECT user_name ,sex from users; -- 打开游标 open my_cursor; SET num=(SELECT count(1) FROM users); -- 使用循环读取游标的值 label:repeat set i=i+1; # 通过游标获取值 FETCH my_cursor into var_user_name,var_sex; SELECT var_user_name,var_sex; UNTIL i>num END repeat label; -- 关闭游标 CLOSE my_cursor; end $$ delimiter ; call proc1();
二、函数
1、格式
create function func_name([param_name type[,...]]) returns type [characteristic ...] begin routine_body end;
参数说明:
(1) func_name 存储函数的名称
(2) param_name type 可选项,指定存储函数的参数。type参数用于指定存储函数的参数类型,该类型可以是mysql数据库中所有支持的类型。
(3) returns type指定返回值的类型
(4) characteristic 可选项,指定存储函数的特性
(5) routine_body sql代码内容
2、操作
没有输入参数
-- 允许创建函数权限信任 set GLOBAL log_bin_trust_function_creators = TRUE; drop FUNCTION if EXISTS func1; delimiter $$ CREATE FUNCTION func1() RETURNS int BEGIN DECLARE cnt int DEFAULT 0; SELECT count(*) into cnt from users; RETURN cnt; end $$ delimiter ; -- 调用存储过程 SELECT func1();
有输入参数
-- 允许创建函数权限信任 set GLOBAL log_bin_trust_function_creators = TRUE; drop FUNCTION if EXISTS func2; delimiter $$ CREATE FUNCTION func2(in_name VARCHAR(20)) RETURNS int BEGIN DECLARE cnt int DEFAULT 0; SELECT count(*) into cnt from users WHERE user_name=in_name; RETURN cnt; end $$ delimiter ; -- 调用存储过程 SELECT func2('迪丽热巴');