简单介绍一下,当二进制日志启用后,这个变量就会启用。它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。如果设置为0(默认值),用户不得创建或修改存储函数,除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限。 设置为0还强制使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性声明函数的限制。 如果变量设置为1,MySQL不会对创建存储函数实施这些限制。 此变量也适用于触发器的创建。 请参见第23.7节“Binary Logging of Stored Programs”。
在执行一个函数时:
CREATE FUNCTION FUN_EF_CR_TEMPLATE_FORMULA(parentPmCode VARCHAR(1000)) RETURNS varchar(1000) CHARSET utf8 BEGIN DECLARE sTempChild VARCHAR(1000); DECLARE sTemp VARCHAR(1000); SET sTemp = "$"; SET sTempChild = parentPmCode; WHILE sTempChild is not null DO SET sTemp = concat(sTemp,",",sTempChild); SELECT GROUP_CONCAT(PM_CODE) INTO sTempChild FROM EF_CR_TEMPLATE_FORMULA WHERE FIND_IN_SET(PARENT_PM_CODE,sTempChild )>0; END WHILE; RETURN sTemp; end
报错信息如下:
> 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and
binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
处理方法:
进入服务器:
-- 进入mysql内部
mysql -uroot -p 输入服务器密码: -- 查看数据库名 show databases; use 数据库名; -- 执行 set global log_bin_trust_function_creators=1;
问题得到解决。
标签:function,sTempChild,mysql,sTemp,SQL,执行,1000 From: https://www.cnblogs.com/2018-james/p/17169288.html