共计 1953 个字符,预计需要花费 5 分钟才能阅读完成。
- 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 公布!