在mysql中创建函数不成功(确定能创建函数)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在mysql中创建函数不成功(确定能创建函数)相关的知识,希望对你有一定的参考价值。
在mysql中创建函数不成功(确定能创建函数)CREATE function SplitString( String varchar(2048), SplitChar char)returns res table( Value varchar(128), vindex int)begin declare index int,unit varchar(128),inext int,len int,i int; set index=1; set i=1; set len=len(String); while index<=len begin set inext=charindex(SplitChar,String,index); if inext=0 set inext=len+1; if inext>index begin set unit=ltrim(rtrim(substring(String,index,inext-index))); if unit<>'' begin insert into res (value,vindex) values (unit,i); set i=i+1; end; end; set index=inext+1; end; return;end;源代码来自于http://www.cnblogs.com/lucc/archive/2009/02/14/1390384.html截个图给大侠们看看,,
在使用MySQL数据库时,有时会遇到MySQL函数不能创建的情况。
出错信息大致类似:
ERROR 1418 (HY000): 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)
ERROR 1418 (HY000): 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> show variables like '%func%';+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF |
+---------------------------------+-------+
1 row in set (0.00 sec)
mysql> set global log_bin_trust_function_creators=1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%func%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON |
+---------------------------------+-------+
1 row in set (0.00 sec)mysql> 参考技术A
你那个是 SQL Server 特有的 表值函数。
也就是一个函数, 返回一个结果集合的。
MySQL 好像是不支持表值函数的样子。 (现在最新的版本支持不支持, 你需要去看看 文档了)
你可以尝试修改成 存储过程 返回结果集的处理。
DELIMITER //
CREATE DEFINER=`root`@`%` PROCEDURE testProc()
BEGIN
SELECT 'Hello 1' AS A, 'World 1' AS B UNION ALL
SELECT 'Hello 2' AS A, 'World 2' AS B;
END //
DELIMITER ;
mysql> call testProc();
+---------+---------+
| A | B |
+---------+---------+
| Hello 1 | World 1 |
| Hello 2 | World 2 |
+---------+---------+
2 rows in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)本回答被提问者采纳 参考技术B 一点一点的注释,有的mysql 不支持
以上是关于在mysql中创建函数不成功(确定能创建函数)的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SQL 脚本、JDBC 或 Spring JdbcTemplate 在 MySQL 中创建函数?