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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章