zoukankan      html  css  js  c++  java
  • 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 $$;
  • 相关阅读:
    &与&&的区别
    x^y=(x&~y)|(~x&y)证明
    a、b交换与比较
    x+y = ((x&y)<<1) + (x^y) 证明
    (x&y) + ((x^y)>>1)即x和y的算数平均值
    默认参数提升
    类型转换
    闲扯原码,补码和反码(转)
    C/C++中float和double的存储结构
    led设备驱动(s3c_led.c)
  • 原文地址:https://www.cnblogs.com/luojianqun/p/4479672.html
Copyright © 2011-2022 走看看