A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

1、创建无参存储过程。

                create procedure p1()
                begin
                   select * from user;
                end;

                调用:
                call procedure();

        ##注意,会出现语法错误,在select 那一句结束
       
        mysql结束符;换成#

        delimiter #
        create procedure p1()
        begin
           select * from user;
        end #

        更换结束符为;
       
        delimiter ;

        调用:
        call p1();    //无参

2、创建有参存储过程

        有参的存储包括两种参数:传入参数和传出参数;
       
        创建有参数存储过程:
        DELIMITER #
        CREATE PROCEDURE p2(
                OUT p1 DECIMAL(9,3),
                OUT p2 DECIMAL(9,3),
                IN p3 INT
        )
       
        BEGIN
                SELECT SUM(english) INTO p1 FROM exam WHERE math > p3;
                SELECT AVG(english) INTO p2 FROM exam ;
        END #
        DELIMITER ;

        p1和p2是检索并传出去的值,而p3是传入值。

        调用:
        CALL p2(@examSum, @examAvg, 80);    //有参
               
               
        当用完后,可以直接查询examSum和examAvg的值:
        SELECT @examSum, @examAvg;
               
        结果如下:       
        @examSum        @examAvg
        415.00                83.86


3、删除存储过程
        drop procedure p1;   //没有括号后面


4.在存储过程中使用循环
        DELIMITER #
        CREATE PROCEDURE pro1()
        BEGIN
         DECLARE i INT DEFAULT 0;
         WHILE i<100000 DO
          INSERT INTO test VALUES(i, CONCAT('aa', i));
          SET i=i+1;
         END WHILE;
        END #

        调用存储过程
        CALL pro1();

        详细解读:
        DECLARE i INT DEFAULT 0;                      // 定义一个变量为i,默认值为0
        WHILE i<100000 DO                                                  // while循环
        INSERT INTO test VALUES(i, CONCAT('aa', i));  //插入数据
        SET i=i+1;                                                        // 让变量i增加一
        END WHILE;                                                         // 结束循环       


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马