• 存储过程和函数


    202063

    17:15

    类似与java中的方法

    好处:

    1、提高了代码的重用性

    2、简化了操作

       

    #存储过程

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

    1、提高代码的重用行

    2、简化操作

    3、减少编译次数并且减少了和数据库的连接次数,提高了效率

       

    一、创建语句

    Create procedure 存储过程(参数列表)

    Begin

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

    End

    注意:

    1、参数列表包含三部分

    参数模式 参数名 参数类型

    举例:

    In stuname varchar(20)

       

    参数模式

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

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

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

    2、如果存储过程也只有一句话,begin end 可以省略

    存储过程体中的每句话的结尾必须加分号

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

    Delimiter ¥

    二、调用语法

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

       

    案例一:空参模式

    ###插入数据###

    Delimiter $

    CREATE PROCEDURE myp1()

    BEGIN

    INSERT INTO admin(username,password)

    VALUES('jonn1','0000'),('bober','0000'),('rose','0000'),('jack','0000'),('trumpe','0000');

    END $

       

    ###调用###

    Call myq1()$

    注意:新版本字段不再受关键字干扰可以正常输入,没必要再添加单引号作为区分,反而会报错;

    修改完结束符后,本次会话都将使用修改完成后的符号作为结束符。

    案例二:in输入模式

    ###创建存储过程是实现根据女神名,查询对应的男神信息###

    Delimiter $ ##声明结束符

    CREATE PROCEDURE myv2(IN beautyName VARCHAR(20)) #创建存储过程以及输入变量

    BEGIN

    SELECT bo.* #查询目标

    FROM boys bo #信息来源

    RIGHT JOIN beauty b ON bo.id=b.boyfriend_id #右连接保存所有右部信息

    WHERE b.name=beautyName; #查询条件

    END $

    ###调用###

    Call myv2('小昭')$

       

    ###创建存储过程,查询是否登录###

    CREATE PROCEDURE myv4(IN username VARCHAR(10),IN PASSWORD VARCHAR(10))

    BEGIN

    DECLARE result INT DEFAULT 0;

    SELECT COUNT(*) INTO result # 赋值给局部变量 result

    FROM admin a

    WHERE a.`username` =username

    AND a.`password`=PASSWORD ;

    SELECT IF(result>0,'成功','失败') AS '登陆结果';

    END$

    ###调用###

    Call myv4('john','8888');

       

    案例3、带out输出模式

    ###创建存储过程,根据对应的女神名返回男神名###

    CREATE PROCEDURE myv5(IN bName VARCHAR(20), OUT gName VARCHAR(20))

    BEGIN

    SELECT boyName INTO gname

    FROM beauty

    INNER JOIN boys ON beauty.boyfriend_id = boys.id

    WHERE bName = beauty.name;

    END$

    ###调用###

    Call ('小昭'@bname)$

    Select @bname$

       

    ###创建存储过程,根据女神名返回对应的男神名和魅力值###

    CREATE PROCEDURE myv6(IN gName VARCHAR(20),OUT bName VARCHAR(20),OUT bucp INT)

    BEGIN

    SELECT boyName, userCP INTO bName,bucp

    FROM beauty b

    RIGHT JOIN boys ON boys.id = b.`boyfriend_id`

    WHERE gName = b.name;

    END$

    ###调用###

    call myv6('小昭',@bname,@bucp)$

    select @bname,@bucp$

       

    案例3 inout混合输入输出模式

    ###输入ab,返回a,b###

    CREATE PROCEDURE myv7(INOUT a INT ,INOUT b INT)

    BEGIN

    SET a= a+20;

    SET b= b+20;

    END$

       

    ###调用###

    Set @a =20$

    Set @b=20$

    Call myv7(@a,@b)$

    Select @a,@b$

       

    3、删除存储过程

    Drop procedure myv1

    不可同时删除多个存储过程

       

    4、查看存储过程

    Show create procedure myv2;

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

      

  • 相关阅读:
    Java 运动模糊
    Efounds笔试
    Algorithms code
    Java 画图
    Java 笔记
    Java 对二值化图片识别连通域
    工厂模式
    数据库克隆
    SQL优化
    微信调起jssdk一闪而过
  • 原文地址:https://www.cnblogs.com/yuknight/p/13051694.html
Copyright © 2020-2023  润新知