在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 中创建函数?

无法在 Azure mySQL 中创建函数/存储过程

如何在 Kotlin 中创建静态函数而不创建对象

如何在 Python 中创建多个构造函数? [复制]

在oracle中创建db link 已经确定创建成功了。在创建视图时为啥还会报不能找到db link呢?

使用 stripe.js 在条带中创建源后,stripeResponseHandler 函数未调用