美文网首页程序员
SQL -函数(18)

SQL -函数(18)

作者: 小白201808 | 来源:发表于2018-09-01 07:56 被阅读36次
     1.含义:一组预先编译好的SQL语句的集合,可以理解成批处理语句
     
     2.与存储过程的区别:
        存储过程:可以有0个返回,也可以有多个返回,合适做批量插入,批量更新
        函数:有且仅有1个返回,合适做处理数据后返回一个结果。
    

    一. 创建语法

      create function 函数名(参数列表)return 返回类型
      begin
         函数体
      end
      注意⚠️:1.参数列表 包含两个部分:参数名 参数类型
      2.函数体:肯定会有return语句,如果没有报错
      如果return语句没有放在函数体的最后也不会报错,但不建议
      return 值;
      3.函数体中仅有一句话,则可以省略begin end
      4.使用 delimiter语句设置结束标记
    

    二. 调用语法

      select 函数名(参数列表)
    

    三. 查看函数

       show create function 函数名
    

    四. 删除函数

       drop function 函数名;           
    

    五. 案例演示

    案例一:返回公司的员工个数

    mysql> create function myf1() returns int
        ->      begin
        ->      declare c int default 0;
        ->      select count(*) into c
        ->      from employees;
        ->      return c;
        ->      end $
    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)
    
    原因:
    
    这是我们开启了bin-log, 我们就必须指定我们的函数是否是
    
    1 DETERMINISTIC 不确定的
    
    2 NO SQL 没有SQl语句,当然也不会修改数据
    
    3 READS SQL DATA 只是读取数据,当然也不会修改数据
    
    4 MODIFIES SQL DATA 要修改数据
    
    5 CONTAINS SQL 包含了SQL语句
    
     
    
    其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。
    
    Mysql自定义函数报错解决方法:
    mysql>set global log_bin_trust_function_creators=1;
    
    
    mysql> set global log_bin_trust_function_creators=TRUE$
    Query OK, 0 rows affected (0.00 sec)
    mysql> create function myf1() returns int
        -> begin 
        -> declare c int default 0;
        -> select count(*) into c 
        -> from employees;
        -> return c;
        -> end $
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> select myf1() $
    +--------+
    | myf1() |
    +--------+
    |    107 |
    +--------+
    1 row in set (0.06 sec)
    
    mysql> create function myf2(num1 float,num2 float) returns float
        -> begin
        -> declare sum float default 0;
        -> set sum = num1+num2;
        -> return sum;
        -> end $
    Query OK, 0 rows affected (0.10 sec)
    
    mysql> select myf2(12,23)$
    +-------------+
    | myf2(12,23) |
    +-------------+
    |          35 |
    +-------------+
    1 row in set (0.00 sec)
    
    
    
    

    注:这是本人的学习笔记及练习,如果有错误的地方望指出一起讨论,谢谢!

    相关文章

      网友评论

        本文标题:SQL -函数(18)

        本文链接:https://www.haomeiwen.com/subject/qgcrwftx.html