IN OUT INOUT 参数的存储过程

DELIMITER $$
 
DROP PROCEDURE IF EXISTS sp_nested_loop$$
CREATE PROCEDURE sp_nested_loop(IN i INT, IN j INT, OUT x INT, OUT y INT, INOUT z INT)
BEGIN
    DECLARE a INTEGER DEFAULT 0;
    DECLARE b INTEGER DEFAULT 0;
    DECLARE c INTEGER DEFAULT 0;
    WHILE a < i DO
        WHILE b < j DO
            SET c = c + 1;
            SET b = b + 1;
        END WHILE;    
        SET a = a + 1;
        SET b = 0;        
    END WHILE;
    SET x = a, y = c;
    SET z = x + y + z;
END $$
DELIMITER ;

调用( CALL )存储过程:

SET @z = 30;
call sp_nested_loop(10, 20, @x, @y, @z);
SELECT @x, @y, @z;

结果:

+------+------+------+
|  @x  |  @y  |  @z  |
+------+------+------+
|  10  |  200 |  240 |
+------+------+------+

IN 参数将值传递给过程。该过程可能会修改该值,但过程返回时调用程序看不到修改。

OUT 参数将过程中的值传递回调用者。它的初始值在过程中为 NULL,并且当过程返回时,调用者可以看到它的值。

INOUT 参数由调用者初始化,可以由过程修改,并且当过程返回时,调用者可以看到过程所做的任何更改。

参考: http//dev.mysql.com/doc/refman/5.7/en/create-procedure.html