• MySQL自定义函数


    语法

    CREATE
        [DEFINER = user]
        FUNCTION sp_name ([func_parameter[,...]])
        RETURNS type
        [characteristic ...] routine_body
    
    func_parameter:
        param_name type
    
    characteristic:
        COMMENT 'string'
      | LANGUAGE SQL
      | [NOT] DETERMINISTIC
      | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
      | SQL SECURITY { DEFINER | INVOKER }

    实例

    创建函数

    DELIMITER $$
    
    USE `world`$$
    
    DROP FUNCTION IF EXISTS `func1`$$
    
    CREATE DEFINER=`root`@`10.0.0.%` FUNCTION `func1`() RETURNS INT(11)
        -- DETERMINISTIC
    BEGIN
        DECLARE res VARCHAR(20);
        
        SELECT COUNT(*) INTO res FROM t4;
        
        RETURN res;
        END$$
    
    DELIMITER ;

    这时候会报错1418

    错误代码: 1418
    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)

    意思是说,函数每次调用的时候会出现不同的结果。这时需要使用

    DETERMINISTIC 或者 NOT DETERMINISTIC 指明是否产生明确的结果
    DELIMITER $$
    
    USE `world`$$
    
    DROP FUNCTION IF EXISTS `func1`$$
    
    CREATE DEFINER=`root`@`10.0.0.%` FUNCTION `func1`() RETURNS INT(11)
       DETERMINISTIC
    BEGIN
        DECLARE res VARCHAR(20);
        
        SELECT COUNT(*) INTO res FROM t4;
        
        RETURN res;
        END$$
    
    DELIMITER ;

    调用

    SELECT func1()

    查看、删除函数

    mysql> select * from information_schema.routinesG
    mysql> delete function func_name;

    早期版本查看函数

      select `name` from mysql.proc where db = 'xx' and `type` = 'FUNCTION'   //函数

    查看函数状态

    show function status;     //函数









  • 相关阅读:
    LINQ学习笔记(4) 扩展方法
    LINQ学习笔记(2) 匿名类型
    jQuery选择器总结
    C#3.0学习笔记(9)转换
    C#3.0学习笔记(11)枚举数和foreach语句实现原理
    C#3.0学习笔记(7)浅谈委托
    C#3.0学习笔记(10)泛型
    中亚网络面试总结
    C#3.0学习笔记(8)浅谈接口interface
    通过VS2010的内存分析工具来分析程序性能问题
  • 原文地址:https://www.cnblogs.com/zh-dream/p/13130847.html
Copyright © 2020-2023  润新知