• 存储过程和函数


    存储过程:一组预先编译好的sql语句的集合,理解成批处理语句。

    1. 提高代码的重用性
    2. 简化操作
    3. 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

    一、创建语法

    create procedure 存储过程名(参数列表)
    begin
        存储过程体(一组合法的sql语句)
    end
    

    注意:

    1. 参数列表包含三部分: 参数模式、参数名、参数类型。例:in stuname varchar(20);
    • 参数模式:
      in:该参数可以作为输入,也就是该参数需要调用方传入值
      out:该参数可以作为输出,也就是该参数可以作为返回值
      inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值
    1. 如果存储过程体仅仅只有一句话,begin end可以省略。存储过程体中的每条sql语句结尾要求必须加分号。存储过程的结尾可以使用delimiter重新设置
      delemiter 结束标记

    二、调用语法

    语法:

    call 存储过程名(实参列表);
    
    1. 空参列表
      案例:插入admin表中五条记录
    delimiter $
    create procedure myok()
    begin
        insert into admin(username,password)
        values ('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');
    end $
    
    call mypl()$
    
    1. 带in模式参数的存储过程
      案例1根据女神名,查询对应的男神信息
    create procedure myp2(in beatuName varchar(20))
    begin
        select bo.*
        from boys bo
        right join beauty b on bo.id=b.boyfriend_id
        where b.name=beautyName;
    
    end
    

    案例2:用户是否登录成功

    create procedure myp3(in username varhchar(10),in password varchar(20))
    begin
        declare result int default 0;
        select count(*) into result
        from admin
        where admin.username=username 
        and admin.password=password;
        
        select if(result >0,'成功','失败);
    end $
    
    1. 带out模式的存储结构
      案例1:根据女神名,返回对应的男神名
    delimiter $
    create procedure myp5(in beautyName varchar(20),out boyName varchar(20))
    begin
        select bo.boyName into boyName
        from boys bo
        inner join beauty b on bo.id = b.boyfriend_id
        where b.name=beautyName;
    end$
    
    set @bNme$
    call myp5('小昭',@bName)$
    select @bName$
    

    案例2:根据女神名,返回对于的男神名和男神魅力值

    delimiter $
    create procedure myp6(in beautyName varchar(20),out boyName varchar(20),out userCP int)
    begin
        select bo.boyName ,bo.userCP into boyName,userCP
        from boys bo
        inner join beauty b on bo.id=b.boyfriend_id
        where b.name=beautyName;
    end $
    
    1. 带inout模式参数的存储过程
      案例1:传入a和b两个值,最终a和b都翻倍返回
    create procedure myp8(inout a int,inout b int)
    begin
        set a=a*2
        set b=b*2;
    end$
    

    三、删除存储过程

    语法:drop procedure 存储过程名

    四、查看存储过程的信息

    语法:show create procedure 存储过程名;

    五、函数

    与存储过程基本相同,区别在于
    存储过程:可以有0个返回,也可以有多个返回,适合做批量插入,批量更新
    函数:有且仅有一个返回,适合做 处理数据后返回一个结果。

    一、创建语法

    create function 函数名(参数列表) returns 返回类型
    begin
        函数体
    end
    

    注意:

    1. 参数列表包含两部分:参数名 参数类型
    2. 函数体:必须有return语句
    3. 函数体中仅有一句话,可以省略begin end
    4. 使用delimiter语句设置结束标记

    二、调用语法

    SELECT 函数名(参数列表)
    
    1. 无参有返回
      案例:返回公司的员工个数
    CREATE FUNCTION myf1() RETURNS INT
    BEGIN
        DECLARE c INT DEFAULT 0;
        SELECT COUNT(*)
        FROM employees;
        RETURN c;
    END
    
    1. 有参有返回
      案例1:根据员工名,返回工资
    CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS DOUBLE
    BEGIN
    	SET @sal=0;
    	SELECT salary INTO @sal
    	FROM employees
    	WHERE last_name = empName;
    	
    	RETURN @sal;
    END$
    

    案例2:根据部门名,返回该部门的平均工资

    CREATE FUNCTION myf3(deptName VARCHAR(20)) RETURNS DOUBLE
    BEGIN
    	DECLARE sal DOUBLE;
    	SELECT AVG(salary) INTO sal
    	FROM employees e
    	JOIN departments d ON e.department_id = d.department_id
    	WHERE d.department_name=deptName;
    	RETURN sal;
    END$
    

    三、查看函数

    语法

    show create function 函数名;
    

    四、删除函数

    drop function 函数名;
    
  • 相关阅读:
    Java——IO输入/输出
    高级查询---嵌套and分页
    Spring mvc拦截器
    SpringMVC实现文件下载
    SpringMVC是实现文件上传
    初始化参数绑定(日期)
    数据校验
    Web Service
    可以用代码发邮件了哦
    JavaMail和James
  • 原文地址:https://www.cnblogs.com/ylcc-zyq/p/13139384.html
Copyright © 2020-2023  润新知