1.对于存储过程中参数类型的个人理解
1.1 IN 类型
Ⅰ. IN参数例子
创建:
mysql > DELIMITER //
mysql > CREATE PROCEDURE demo_in_parameter(IN p_in int)
-> BEGIN
-> SELECT p_in;
-> SET p_in=2;
-> SELECT p_in;
-> END;
-> //
mysql > DELIMITER ;
执行结果:
mysql > SET @p_in=1;
mysql > CALL demo_in_parameter(@p_in);
+------+
| p_in |
+------+
| 1 |
+------+
+------+
| p_in |
+------+
| 2 |
+------+
mysql> SELECT @p_in;
+-------+
| @p_in |
+-------+
| 1 |
+-------+
解释:从例子中可以看出如果传入的类型时IN类型,那么在储存过程内部不管把值改变成什么样,最终它的值还是原来的值。传入的是1,第一次查询是1,改变后内部查询是改变的值,但是存储过程外查询还是1
1.2 OUT 类型
Ⅱ.OUT参数例子
创建:
mysql > DELIMITER //
mysql > CREATE PROCEDURE demo_out_parameter(OUT p_out int)
-> BEGIN
-> SELECT p_out;
-> SET p_out=2;
-> SELECT p_out;
-> END;
-> //
mysql > DELIMITER ;
执行结果:
mysql > SET @p_out=1;
mysql > CALL sp_demo_out_parameter(@p_out);
+-------+
| p_out |
+-------+
| NULL |
+-------+
+-------+
| p_out |
+-------+
| 2 |
+-------+
mysql> SELECT @p_out;
+-------+
| p_out |
+-------+
| 2 |
+-------+
解释:不管从外部传入OUT类型的值是多少那么他的初始值始终是NULL,如果在存储过程内部操作OUT类型的数据那么,就会改变OUT类型的值,
在外部查询这个OUT类型的值就是已经改变了的值。如果传入10 ,在内部第一次查询就是null ,设置成2,那么在外部查询就是2
1.3 INOUT
Ⅲ. INOUT参数例子
创建:
mysql > DELIMITER //
mysql > CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int)
-> BEGIN
-> SELECT p_inout;
-> SET p_inout=2;
-> SELECT p_inout;
-> END;
-> //
mysql > DELIMITER ;
执行结果:
mysql > SET @p_inout=1;
mysql > CALL demo_inout_parameter(@p_inout) ;
+---------+
| p_inout |
+---------+
| 1 |
+---------+
+---------+
| p_inout |
+---------+
| 2 |
+---------+
mysql > SELECT @p_inout;
+----------+
| @p_inout |
+----------+
| 2 |
+----------+
解释:INOUT顾名思义是结合了IN和OUT两种类型的特点,传入值改变后会返回到传出值