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