存储例程要么是过程,要么是函数。方法创建存储例程创建过程
和创建函数
语句(见第13.1.17节“CREATE PROCEDURE和CREATE FUNCTION语句”).方法调用过程调用
声明(见第13.2.1节,“CALL语句”),并且只能返回使用输出变量的值。可以像任何其他函数一样从语句内部调用函数(即通过调用函数名),并且可以返回一个标量值。存储例程的主体可以使用复合语句(参见第13.6节,“复合语句语法”).
方法可以删除存储的例程下降过程
和删除函数
语句(见第13.1.29节“DROP过程和DROP函数语句”),并用改变的过程
和改变函数
语句(见第13.1.7节,“ALTER PROCEDURE语句”).
存储过程或函数与特定的数据库相关联。这有几个含义:
当调用例程时,隐式
使用
执行(当例程终止时撤销)。db_name
使用
存储例程中的语句是不允许的。可以用数据库名称限定例程名称。这可以用于引用不在当前数据库中的例程。例如,调用存储过程
p
或函数f
这与测验
可以说是数据库调用test.p ()
或test.f ()
.当一个数据库被删除时,所有与它相关的存储例程也会被删除。
存储的函数不能递归。
存储过程中的递归是允许的,但默认情况下是禁用的。要启用递归,请设置max_sp_recursion_depth
将服务器系统变量设置为大于零的值。存储过程递归增加了对线程堆栈空间的需求。的值max_sp_recursion_depth
时,可能需要通过增加的值来增加线程堆栈的大小thread_stack
在服务器启动。看到第5.1.8节,“服务器系统变量”,以查询更多资料。
MySQL支持一个非常有用的扩展,它支持使用regular选择
语句(即不使用游标或局部变量)。这种查询的结果集直接发送到客户机。多个选择
语句生成多个结果集,因此客户端必须使用支持多个结果集的MySQL客户端库。这意味着客户端必须使用来自MySQL 4.1版本的客户端库。客户端还应该指定CLIENT_MULTI_RESULTS
选项。对于C程序,这可以通过mysql_real_connect ()
C API函数。看到mysql_real_connect (),多语句执行支持.
在MySQL 8.0.22及以后版本中,由存储过程中的语句引用的用户变量在第一次调用过程时就确定了它的类型,并且在以后每次调用过程时都保留这种类型。