您的位置:首页 > 数据库 > MySQL

MySql存储过程游标、函数

2022-05-30 22:40 3939 查看

一、游标

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('迪丽热巴');

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: