• 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_RESETHAS_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 公布!