暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL中存储过程

brevity分享 2021-09-15
253
存储过程和函数与Java中的方法很相似,存储过程就是一组预先编译好的SQL语句的集合,它可以提高代码的可用性,还可以减少编译次数,也减少了与数据库服务器的连接次数,提高了效率。存储过程应该先创建后调用。语法如下:
    CREATE PROCEDURE 存储过程名(参数列表) BEGIN 存储过程体(一组合法的SQL语句) END

    其中参数列表包含三部分:参数模式、参数名、 参数类型,参数模式包括:IN(该参数可以作为输入,也就是该参数需要调用方传入值)、OUT(该参数可以作为输出,也就是该参数可以作为返回值)、INOUT(该参数既可以作为输入也可以作为输出,也就是该参数即需要传入值,又可以返回值);如果存储过程体只有一句话,BEGIN END可以省略。如果存储过程体中有多条语句,每条SQL语句的结尾必须加分号,存储过程的结尾使用DELIMITER重新设置,即DELIMITER 结束标志(自定义标志),例如:DELIMITER $。存储过程的调用方法如下:
      CALL 存储过程名(实参列表);
      存储过程示例代码如下:
        -- 空参存储过程声明
        DELIMITER $
        CREATE PROCEDURE mypo()
        BEGIN
        INSERT INTO admin(username,`password`) VALUES
        ('jery','12345'),('Tom','12345'),('Jerry','12345'),
        ('Jack','12345'),('John','12345'),('Bob','12345');
        END $
        -- 空参存储过程调用
        CALL mypo() $
        -- 带IN模式的存储过程
        DELIMITER &
        CREATE PROCEDURE mypo2(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 &
        -- 带IN模式的存储过程调用
        CALL mypo2('张飞')&
        -- 多个参数的存储过程
        DELIMITER $
        CREATE PROCEDURE mypo3(IN username VARCHAR(20),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 $
        -- 多个参数存储过程的调用
        CALL mypo3('张无忌','666666')$
        -- 带OUT模式的存储过程
        DELIMITER $
        CREATE PROCEDURE mypo5(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 $
        -- 带OUT模式的存储过程调用
        CALL mypo5('无极',@bName)$
        SELECT @bName$
        -- 多个参数的存储过程
        DELIMITER $
        CREATE PROCEDURE mypo6(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 $
        -- 多个参数存储过程的调用
        CALL mypo6('无极',@bName,@userCP)$
        SELECT @bName,@userCP$
        -- 带INOUT模式的存储过程
        DELIMITER $
        CREATE PROCEDURE mypo8(INOUT a INT,INOUT b INT)
        BEGIN
        SET a = a*2;
        SET b = b*3;
        END $
        -- 带INOUT模式的存储过程的调用
        SET @m=10$
        SET @n=20$
        CALL mypo8(@m,@n)$
        SELECT @m,@n$
        存储过程的删除:
          DROP PROCEDURE 存储过程名;   
          DROP PROCEDURE mypo8;
          存储过程信息的查看:
            SHOW CREATE PROCEDURE 存储过程名;
            SHOW CREATE PROCEDURE mypo2;


            文章转载自brevity分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论