zoukankan      html  css  js  c++  java
  • 存储过程和函数

    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;

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

      

  • 相关阅读:
    POJ 2236 Wireless Network(并查集)
    POJ 2010 Moo University
    POJ 3614 Sunscreen(贪心,区间单点匹配)
    POJ 2184 Cow Exhibition(背包)
    POJ 1631 Bridging signals(LIS的等价表述)
    POJ 3181 Dollar Dayz(递推,两个long long)
    POJ 3046 Ant Counting(递推,和号优化)
    POJ 3280 Cheapest Palindrome(区间dp)
    POJ 3616 Milking Time(dp)
    POJ 2385 Apple Catching(01背包)
  • 原文地址:https://www.cnblogs.com/yuknight/p/13051694.html
Copyright © 2011-2022 走看看