您的位置:首页 > 数据库 > 数据库管理 > 正文

MySQL自定义函数

更多 时间:2014-12-19 类别:数据库 浏览量:1392

MySQL自定义函数

MySQL自定义函数

MySQL自定义函数能返回字符串,整数或实数;可以定义一次作用于一行的简单函数,或作用于多行的组的集合函数

一、创建自定义函数

  •  
  • SQL 代码   复制
  • 
            CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL}
            BEGIN
                 //函数实现的语句
    
    			        END; 
  • 参数说明

    1、aggregate     指定创建的函数是普通的自定义函数,还是AGGREGATE函数。

    2、function_name 是用在SQL声明中以备调用的函数名字。

    3、RETURNS       说明函数返回值的类型。 

     

    实例

  •  
  • SQL 代码   复制
  • 
            mysql> delimiter //
            mysql> create function fun_add_rand(
                ->     in_int int
                -> )
                -> RETURNS int
                -> BEGIN
                ->     declare i_rand int;
                ->     declare i_return int;
                ->
                ->     set i_rand=floor(rand()*100);
                ->     set i_return = in_int + i_rand;
                ->
                ->     return i_return;
                -> END;
                -> //
            mysql> delimiter ;
    
    		
  •  

  • SQL 代码   复制
  • 
    delimiter $$
    /* 参数为 int类型 */
    create function rand_string(n INT)
    /*设置返回值类型 为字符串*/
    returns varchar(255)
    /* 函数开始 */
    begin 
    /* 的定义局部变量,有默认值*/
     declare chars_str varchar(100) default
       'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
    /*在定义空变量*/
     declare return_str varchar(255) default '';
    /* 定义整型 值为 0*/
     declare i int default 0;
    /* 循环 */
     while i < n do 
    /* 制作随机字符串*/
       set return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1));
       set i = i + 1;
    /* 结束循环 */
       end while;
    /* 返回制作的随机字符串*/
      return return_str;
      end $$
      delimiter ; 
    
    		
  •  

    二、使用自定义函数

    以上示例函数的使用

     

  • 1、fun_add_rand自定义函数
  •  
  • SQL 代码   复制
  • 
           mysql> select id from test_inn;
            +------+
            | id   |
            +------+
            |    1 |
            |    1 |
            |    1 |
            |    1 |
            +------+
            mysql> select fun_add_rand(id) from test_inn;
            +------------------+
            | fun_add_rand(id) |
            +------------------+
            |               91 |
            |               34 |
            |               93 |
            |               66 |
            +------------------+
    
    		
  • 2、rand_string自定义函数

    select rand_string(5);  

     

    三、删除自定义函数

    语法

    DROP FUNCTION [ IF EXISTS ] function_name;

    例如

    mysql> drop function if exists fun_add_rand;

     

    四、查看自定义函数创建信息

    语法

    SHOW CREATE FUNTION function_name;

     

    五、在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)

    这是因为有一个安全参数没有开启,log_bin_trust_function_creators 默认为0,是不允许function的同步的,开启这个参数,就可以创建成功了。

     

  •  
  • SQL 代码   复制
  • 
    mysql> show variables like '%fun%';
    +---------------------------------+-------+
    | 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 '%fun%';                                             
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | log_bin_trust_function_creators | ON    |
    +---------------------------------+-------+
    1 row in set (0.00 sec)
    
    		
  •  

    标签:MySQL
    您可能感兴趣