博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql游标的应用包括函数
阅读量:4992 次
发布时间:2019-06-12

本文共 1753 字,大约阅读时间需要 5 分钟。

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;

转载于:https://www.cnblogs.com/penglei2011/p/3723120.html

你可能感兴趣的文章
启动eclipse出现错误Java was started but returned exit =一个数字
查看>>
myBatis模糊查找
查看>>
数据结构与算法之五 链接列表
查看>>
java 对象数组
查看>>
设计模式读书笔记-单件模式(创建型模式)
查看>>
Oracle——热备份
查看>>
Vue路由history模式踩坑记录:nginx配置解决404问题
查看>>
c# 多张图片合成一张图片
查看>>
使用SQL Server 2008的事务日志传送功能备份数据库(logshiping)
查看>>
AngularJS多个ng-app只解析第一个的问题
查看>>
强制修改常量的值
查看>>
Grunt 初体验
查看>>
hive跑mapreduce报java.lang.RuntimeException: Error in configuring object
查看>>
ArcGIS中的坐标系统定义与投影转换方法
查看>>
机械臂的碰撞检测资料
查看>>
[UnityShader基础]01.渲染队列
查看>>
字符串转整型C++
查看>>
随机生成红包算法
查看>>
Datatable get请求传参应用
查看>>
杭电1170
查看>>