- GreatSQL社区原创内容未经受权不得随便应用,转载请分割小编并注明起源。
MySQL 的function创立会有各种限度,常常应用的语句的限度如下:
1、CONTAINS_DYNAMIC_SQL
CREATE function f1() returns int BEGIN set @cmd = 'select * from t1'; PREPARE stmt1 FROM @cmd; EXECUTE IMMEDIATE @cmd; return 1;END;
SQL Error [1336] [0A000]: Dynamic SQL is not allowed in stored function or trigger
如果在function创立的时候蕴含PREPARE,EXECUTE, DEALLOCATE,那么这些都会被判断为蕴含DYNAMIC SQL,这些语法都会被回绝。因为应用存储过程的目标是避免应用严格类型的数据进行SQL注入。这个例子外面的sql语句是固定的,曾经脱离了prepare的应用意义,因而不须要创立这种场景。。
2、MULTI_RESULTS
CREATE function f1() returns int BEGIN select * from tb_tmp; return 1;END;
SQL Error [1415] [0A000]: Not allowed to return a result set from a function
这里select语句会返回多行后果,而function只能容许返回一个固定后果,因而这种状况也不容许。
3、HAS_COMMIT_OR_ROLLBACK
CREATE function f1() returns int BEGIN commit; return 1;END;
SQL Error [1422] [HY000]: Explicit or implicit commit is not allowed in stored function or trigger.
因为在procedure的set x=fi()的场景外面,一个set语句蕴含了begin work和commit work,如果f1有commit的话会影响事务前面的治理。
4、其余状况
除了以上状况还有另外2种也会被回绝:别离是 HAS_SQLCOM_RESET
、HAS_SQLCOM_FLUSH
。应用时候留神避开。
5、补充阐明
在procedure中一条蕴含begin和commit的语句除了下面提到的set,还有IF, CASE, DECLARE, RETURN,这些命令创立时候都会设置open_tables=true,而后执行open_and_lock_tables,当执行完子命令再进行rollback或者commit操作。
Enjoy GreatSQL :)
深入浅出MGR专栏
1.MGR简介 | 深入浅出MGR
https://mp.weixin.qq.com/s/lb...
2.组复制技术架构 | 深入浅出MGR
https://mp.weixin.qq.com/s/6_...
3.装置部署MGR集群 | 深入浅出MGR
https://mp.weixin.qq.com/s/Nh...
4.利用MySQL Shell装置部署MGR集群 | 深入浅出MGR
https://mp.weixin.qq.com/s/51...
5.MGR治理保护 | 深入浅出MGR
https://mp.weixin.qq.com/s/D5...
文章举荐:
MySQL主从复制原理及搭建过程
https://mp.weixin.qq.com/s/X2...
MySQL主从复制之GTID模式介绍
https://mp.weixin.qq.com/s/9g...
MySQL主从复制之半同步(semi-sync replication)
https://mp.weixin.qq.com/s/Bh...
Linux环境监控工具汇总
https://mp.weixin.qq.com/s/SY...
MySQL Test Run 测试框架介绍
https://mp.weixin.qq.com/s/JA...
对于 GreatSQL
GreatSQL是由万里数据库保护的MySQL分支,专一于晋升MGR可靠性及性能,反对InnoDB并行查问个性,是实用于金融级利用的MySQL分支版本。
Gitee:
https://gitee.com/GreatSQL/Gr...
GitHub:
https://github.com/GreatSQL/G...
Bilibili:
https://space.bilibili.com/13...
微信&QQ群:
可搜寻增加GreatSQL社区助手微信好友,发送验证信息“加群”退出GreatSQL/MGR交换微信群
QQ群:533341697
微信小助手:wanlidbc
本文由博客一文多发平台 OpenWrite 公布!