• mysql游标的应用包括函数


    mysql游标样例讲解:

    create function test() returns varchar(200)

    begin

    declare finished int default 0;

    declare list varchar(200) default "";

    declare n_name varchar(200) default "";

    declare fethCur cursor for select xxx_name from xxx;

    declare continue handler for NOT FOUND set finished=1; open fethCur;

    fetchCurLoop:Loop

    FETCH fethCur into n_name;

    if finished then leave  fetchCurLoop;

    end if;

    set list = concat(list,",",n_name);

    end Loop;

    close fethCur;

    return substr(list,3);

    end;

    在mysql后台执行以上脚本提示:1418错误码,This function has none of DETERMINISTIC, NO SQL类似描述

    原因:
    这是我们开启了bin-log, 我们就必须指定我们的函数是否是
    1 DETERMINISTIC 不确定的
    2 NO SQL 没有SQl语句,当然也不会修改数据
    3 READS SQL DATA 只是读取数据,当然也不会修改数据
    4 MODIFIES SQL DATA 要修改数据
    5 CONTAINS SQL 包含了SQL语句

    其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。

    show variables like 'log_bin_trust_function_creators'; Value是OFF。执行 set global log_bin_trust_function_creators=1;即可创建函数成功,但是重启mysql该设置会无效,需要修改my.cnf文件。

    执行函数查询结果命令:select 函数名() as test;

    函数语法规则:create or replace function function_name(参数1,参数2..) return return_datatype

    mysql中的substr(string string,num start,num length)函数,start是从1开始。

    FETCH 获取游标当前指针的记录,并传给指定变量列表,注意变量数必须与游标返回的字段数一致,要获得多行数据,使用循环语句去执行FETCH

    函数借用游标实现数据插入操作,mysql函数需要有返回值:

    create function tests() returns varchar(200)
    begin
    declare finished boolean default 0 ;
    declare tmp varchar(200) default "";
    declare tmp1 varchar(200) default "";
    declare fe cursor for
    select n_code,n_name from A;
    declare continue handler for sqlstate '02000' set finished=1;

    open fe;
    repeat
    FETCH fe into tmp,tmp1;
    if not finished then
    insert into B(n_code,n_name) values (tmp,tmp1);
    end if;
    until finished end repeat;
    close fe;
    return tmp;
    end;

  • 相关阅读:
    Mysql安装
    mysql 密码过期
    svn 合并分支
    idea 分支主干管理
    linux删除数据恢复,extundelete
    linux 转换文件编码
    sina 接口 根据ip获取各个国家和地区
    SQL中char、varchar、nvarchar的区别
    C#中virtual和abstract区别,举例子
    父类和子类的关系、代码例子
  • 原文地址:https://www.cnblogs.com/penglei2011/p/3723120.html
Copyright © 2020-2023  润新知