• 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('迪丽热巴');
  • 相关阅读:
    初识Kafka
    初学Linux (Linux_note)
    Zookeeper_ACL
    Zookeeper简单配置
    getWindow().setFlags
    设置session失效时间
    Android开发者必知的5个开源库
    oracle A用户访问B用户的表aa
    oracle 根据约束名查表名
    java ftp上载下传 遇到的问题
  • 原文地址:https://www.cnblogs.com/sportsky/p/16320545.html
Copyright © 2020-2023  润新知