zoukankan      html  css  js  c++  java
  • day14:存储过程

    存储过程

    存储过程:类似于Java中的方法

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

    含义:一组预先编译好的SQL语句的集合,可以理解成批处理语句

    一、创建语法

    create  procedure  存储过程名(参数列表)  

    begin

      存储过程体(一组合法的SQL语句)

    end;

    注意:

    1、参数列表包含三部分:参数模式    参数名   参数类型

    例如:  IN  stuname  varchar(20)

    参数模式:

    IN  :该参数可以作为输入,也就是该参数需要调用方传入值

    OUT  :该参数可以作为输出,也就是该参数可以作为返回值

    INOUT :该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

    2、如果存储过程体仅仅只有一句话,begin   end可以省略,存储过程体中的每条SQL语句的结尾要求必须加分号。

    存储过程的结尾可以使用delimiter 重新设置

     语法:delimiter  结束标记            例如:delimiter  $

     

    二、调用语法

    call  存储过程名(实参列表);

    新建admin表

    create table admin(
        id int primary key auto_increment,
        aname varchar(55),
        pwd varchar(55)
    );
    
    insert into admin(aname,pwd) values('张三','123456');

      

    1、空参列表

    例如:向admin表中插入5条记录

    a、新建存储过程myp1

    create procedure myp1()
    BEGIN
        insert into admin(aname,pwd) values('李四','123456'),
        ('王五','123456'),('赵六','123456'),('张龙','123456'),
        ('赵虎','123456');
    END;

    如果出现不支持存储过程体和存储过程结束同时有分号,则创建如下:

    delimiter $
    create procedure myp1()
    BEGIN
        insert into admin(aname,pwd) values('李四','123456'),
        ('王五','123456'),('赵六','123456'),('张龙','123456'),
        ('赵虎','123456');
    END $

    b、调用存储过程myp1

    call myp1();

    2、创建带in模式参数的存储过程

    例如:创建存储过程实现,根据部门名,查询对应的所有员工的信息

    create procedure myp2(in depName varchar(55))
    BEGIN
        select * from employee e where e.departmentid=
        (select id from department where dname=depName);
    end;

    调用

    call myp2('技术部');

    3、创建带out模式的存储过程

    例如:创建存储过程体,根据员工名,查询对应的部门名称

    create procedure myp3(in ename varchar(55),out dname varchar(55))
    BEGIN
        select d.dname into dname
        from department d where d.id=
        (select departmentid from employee e where e.ename=ename);
    end;

    调用

    call myp3('张三',@dname);
    select @dname;

    4、创建带inout模式参数的存储过程

    例如:传入a和b两个值,最终a和b都翻倍并返回

    create procedure myp4(inout a int,inout b int)
    BEGIN
        set a=a*2;
        set b=b*2;
    end;

    调用

    set @a=5;
    set @b=8;
    CALL myp4(@a,@b);
    select @a,@b;

    三、删除存储过程

    语法:drop  procedure  存储过程名

    例如:删除存储过程myp1;

    drop procedure myp1;

    四、查看存储过程的信息

    例如:查看存储过程myp2的信息

    show create procedure myp2;
  • 相关阅读:
    Interview with BOA
    Java Main Differences between HashMap HashTable and ConcurrentHashMap
    Java Main Differences between Java and C++
    LeetCode 33. Search in Rotated Sorted Array
    LeetCode 154. Find Minimum in Rotated Sorted Array II
    LeetCode 153. Find Minimum in Rotated Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 31. Next Permutation
    LeetCode 60. Permutation Sequence
    LeetCode 216. Combination Sum III
  • 原文地址:https://www.cnblogs.com/wuguiyu/p/11771719.html
Copyright © 2011-2022 走看看