窥探mysql存储过程细节

2019-01-04 14:54:35丽君

mysql> delimiter // mysql> create procedure out_proced(OUT param INT) -->begin -->select count(*) into param from proced; -->end -->// mysql>delimiter ; mysql> call out_proced(@a); mysql>select @a; +------+ | @a | +------+ | 3 | +------+

最后就是INOUT,很明显INOUT指定的参数被调用者初始化,其值在存储过程中可以被修改,并且任何改变对于调用者来说都是可见的。

看下面的例子:

mysql> delimiter // mysql> create procedure inout_proced(INOUT param INT) --> begin --> select count(*) into param from proced where id>param; --> end -->// mysql>delimiter ; mysql>set @a = 3; mysql>call inout_proced(@a); mysql>select @a; 查看变量的值是否改变

以上就是创建一个简单的存储过程的方式。

删除存储过程

删除存储过程的语法:

DROP PROCEDURE IF EXISTS procedure_name

下面是使用实例:

mysql>drop procedure if exists proced;

修改存储过程

存储过程的修改时不能改变存储过程内的sql语句的,只能改变其属性,其语法如下:

ALTER PROCEDURE proc_name [characteristic ...] characteristic: COMMENT 'string' | LANGUAGE SQL | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER }

总结:无论是删除存储过程还是修改存储过程,必须保证你要修改或者删除存储过程没有被其他存储过程使用,例如你有存储过程A,和存储过程B。A在B中被使用,如果我们想修改A或者删除A,必须确保B中不再使用A,否则如果我们删除A以后,再调用B的时候就会报错。

举个例子:

mysql>delimiter // mysql>create procedure A(IN pa1 INT,OUT pa2 INT) -->begin -->select count(*) into pa2 from proced where id>pa1; -->end -->// mysql>create procedure B(INOUT pa INT) -->begin -->declare v int; -->call A(pa,v); -->set pa = v; -->end -->// mysql>delimiter ; mysql>drop procedure A; mysql>set @a=5; mysql>call B(@a); ERROR 1305 (42000): PROCEDURE test.A does not exists

以上就是对存储过程简单的介绍,希望对大家学习mysql存储过程有所帮助。

您可能感兴趣的文章:

mysql存储过程中的异常处理解析MySQL存储过程和函数的操作(十二)MySQL存储过程的优化实例实例解析MySQL中的存储过程及存储过程的调用方法MySQL存储过程中使用动态行转列MySql存储过程之逻辑判断和条件控制MySql存储过程与函数详解MySQL存储过程中实现执行动态SQL语句的方法Java调用MySQL存储过程并获得返回值的方法mysql 存储过程详解