MySQL进阶19--函数的创建(举例)/设置mysql的创建函数的权限/查看(show)/删除(drop) / 举4个栗子

/*MySQL进阶19 函数

存储过程和函数:都类似于java中的方法;
存储过程和函数通用好处:
    1.提高代码的重用性
    2.简化操作
    好处: 减少操作次数,减少了编译次数,减少了和服务器的连接次数,提高了效率    
---------------
#区别
    存储过程 (可以有0个或者多个返回值),适合做批量插入或者批量更新
    函数: 有且仅有一个返回值 ; 适合做处理数据后的返回一个结果

*/
/*
#一: 创建语法
create function 函数名(参数列表) returns 返回类型
begin
    函数体
end

注意: 
    参数列表 包含两个部分;
    参数名 参数类型;
函数体 : 肯定有return 语句,如果没有会报错;
3. 函数体中仅有一句话,则可以省略begin end
4. 使用delimiter 语句设置结束标记
    delimiter $;

#二: 调用自定义函数
    select 函数名(参数列表)
    
*/
#-------------------案例演示函数------------------------------
    #1 无参有返回
    
    #根据提示,设置mysql函数权限
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
SET @@global.log_bin_trust_function_creators='ON';
    #案例 : 返回公司的员工个数 [如下代码可在本地运行,不用在cmd终端打开运行]
DELIMITER $
CREATE FUNCTION myf1() RETURNS INT
BEGIN 
    DECLARE rt1 INT DEFAULT 0;  #定义局部变量/赋值并returns
    
    SELECT COUNT(*) INTO rt1
    FROM employees;
    RETURN rt1;
END $
SELECT  myf1() $;   ##结果是 : 107

   #2.有参数有返回
   #案例1:根据员工名,返回它的工资
DELIMITER $
CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS DOUBLE
BEGIN
    DECLARE rt DOUBLE DEFAULT 0;
    SELECT `salary` INTO rt
    FROM employees e
    WHERE e.last_name = empName AND e.first_name='empName';
    RETURN rt;
END $
SET @empName='K_ing' $
SELECT  myf2(@empName) $;  ##返回值为 : 24000

    #案例2: 根据部门名,返回该部门的平均工资
DELIMITER $
CREATE FUNCTION myf5(depName VARCHAR(20)) RETURNS DOUBLE
BEGIN
    DECLARE rt DOUBLE ;
    SELECT AVG(salary) INTO rt
    FROM employees e
    JOIN departments d ON e.department_id = d.department_id
    WHERE d.department_name=depName;
    RETURN rt;
END $
SELECT  myf5('IT') $;  ##结果是 : 5760
 
#三: 查看函数的过程/charset/Datebase collation等信息

SHOW CREATE FUNCTION myf5;

#四: 删除函数(命令行可操纵!)
DROP FUNCTION myf3;
 
#案例"
    #1.创建函数,实现传入两个float ,返回两者之和
DELIMITER $
CREATE FUNCTION test_fun1(a FLOAT,b FLOAT) RETURNS FLOAT
BEGIN
    DECLARE SUM FLOAT DEFAULT 0;
    SET SUM=a+b;
    RETURN SUM;
END $

SELECT test_fun1(1,12) $   ##结果为:13
 
 
 

猜你喜欢

转载自www.cnblogs.com/zhazhaacmer/p/9897989.html
今日推荐