mysql 创建用户自定义函数

为了防止分号产生的中途输出,自己定义一个 分隔符,这里仿照mysql官方的例子:使用两个美元符号 $$ 作为分割符号,下面这段代码就是创建一个自定义mysql函数的原型了,可以在这个基础上修改,这样,创建函数就不会产生很多错误了.

set global log_bin_trust_function_creators = 1; -- 开启bin_log 复制 函数创建
DROP FUNCTION IF EXISTS hello; -- 删掉已经存在的
DELIMITER $$    -- 定义分隔符,必须要有,可以不是$$
CREATE FUNCTION hello( s varchar(30)) -- 多个参数用,分割 参数的类型必须是mysql列存在的类型
RETURNS VARCHAR(255)                  -- 指定返回值类型,如果你不确定返回文本长度,可以使用text
BEGIN
    DECLARE str varchar(255) default ‘hello ‘; -- 定义一个变量,可以指定默认值
    SET str = concat(str,s);                    -- 设置改边变量的值
    RETURN str;                                 -- 返回值
END $$                                          -- 注意看清楚了,这个end后面有你在前面定义的分割符号
DELIMITER $$                                    -- 好,这里结束。

/**

*开启数据库自定义函数功能

*/

set global log_bin_trust_function_creators=1;

/*
* 计算poi点距离
*
*/
DELIMITER $$
CREATE DEFINER = CURRENT_USER FUNCTION `getDistance`(`lon1` float,`lat1` float,`lon2` float,`lat2` float)
 RETURNS double
begin
    declare d double;
    declare radius int;
    set radius = 6378140; #假设地球为正球形,直径为6378140米
    set d = (2*ATAN2(SQRT(SIN((lat1-lat2)*PI()/180/2)  
        *SIN((lat1-lat2)*PI()/180/2)+  
        COS(lat2*PI()/180)*COS(lat1*PI()/180)  
        *SIN((lon1-lon2)*PI()/180/2)  
        *SIN((lon1-lon2)*PI()/180/2)),  
        SQRT(1-SIN((lat1-lat2)*PI()/180/2)  
        *SIN((lat1-lat2)*PI()/180/2)  
        +COS(lat2*PI()/180)*COS(lat1*PI()/180)  
        *SIN((lon1-lon2)*PI()/180/2)  
        *SIN((lon1-lon2)*PI()/180/2))))*radius;
    return d;
END $$
DELIMITER $$;

时间: 2024-10-17 08:52:11

mysql 创建用户自定义函数的相关文章

mysql创建自定义函数与存储过程

mysql创建自定义函数与存储过程 一 创建自定义函数 在使用mysql的过程中,mysql自带的函数可能不能完成我们的业务需求,这时就需要自定义函数,例如笔者在开发过程中遇到下面这个问题 mysql表结构如下 DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `pic` varchar(50) NOT NULL, `hashcode` varchar

mysql 创建 存储函数 split_string

1.创建函数 -- 创建存储函数 DROP FUNCTION IF EXISTS SPLIT_STR; -- 判断是否存在,存在则删除 CREATE FUNCTION SPLIT_STR( x VARCHAR(255), delim VARCHAR(12), pos INT ) RETURNS VARCHAR(255) DETERMINISTIC BEGIN RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBST

mysql中创建用户自定义函数

总有一些复杂的逻辑我们还需要多处使用,此时就显现出函数的重要性. mysql函数的要素 函数名 参数列表 函数体 返回值 定义语法 create function fun_name(参数列表) returns 返回值类型 函数体 示例 不带参数 delimiter $$ create function sayhello() returns varchar(20) begin return 'hello'; end$$ delimiter ; 调用示例:select sayhello(); say

MySQL 创建自定义函数(1)

1. 创建测试自定义函数(1) CREATE DEFINER=`dbdh`@`localhost` FUNCTION `test`.`sp_function_dbdh_three`() RETURNS varchar(255) CHARSET utf8BEGIN    DECLARE l_NEW_STR VARCHAR(255);  -- 定义变量    DECLARE l_NAYIBU_NUM1   INT;     SET l_NAYIBU_NUM1=101; IF (l_NAYIBU_NU

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_f

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

MySQL创建函数报“ERROR 1418 ”错误,不能创建函数

MySQL创建函数报ERROR 1418错误,不能创建函数,根据官方提示是说,不能创建函数可能是一个安全设置方面的配置或功能未开启原因,下面我们一起来看. 错误 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

MySQL下创建序列及创建自定义函数方法介绍

工作过程中需要将基于DB2数据库的应用以及数据迁移到MySQL中去,在原应用中,大量使用了SEQUENCE,考虑尽量减少代码的修改,决定在迁移后的应用中继续保留SEQUENCE的使用,这就要求在MySQL中寻找替代SEQUENCE的解决方案. 在DB2中创建一个SEQUENCE的方法如下: DROP SEQUENCE TRZ_MEMBER.SEQ_TRZ_MEMBER_NO; CREATE SEQUENCE TRZ_MEMBER.SEQ_TRZ_MEMBER_NO AS BIGINT INCRE

MySQL 创建函数(Function)

目标 怎么样MySQL创建数据库功能(Function) 语法 CREATE FUNCTION func_name ( [func_parameter] ) //括号是必须的,參数是可选的 RETURNS type [ characteristic ...] routine_body CREATE FUNCTION 用来创建函数的keyword: func_name 表示函数的名称: func_parameters为函数的參数列表,參数列表的形式为:[IN|OUT|INOUT] param_na

mysql 报错之创建自定义函数

I experienced this error while trying to alter one of my stored procedures remotely on a master server. After some research, I ended up getting information from “Binary Logging of Stored Programs“. From MySQL Reference in verbatim:When you create a s