调用sp_name([参数[…]])调用sp_name(())
不带参数的存储过程可以不带括号调用。也就是说,调用p ()
而且叫p
是等价的。
调用
是否可以使用声明为的参数将值传递回调用者出
或INOUT
参数。当过程返回时,客户端程序还可以获得在例程中执行的最终语句所受影响的行数:在SQL级别,调用ROW_COUNT ()
函数;从C API,调用mysql_affected_rows ()
函数。
有关未处理条件对过程参数的影响的信息,请参见第13.6.7.8节“条件处理和OUT或INOUT参数”.
类从过程中获取值出
或INOUT
参数,通过用户变量传递参数,然后在过程返回后检查变量的值。如果从另一个存储过程或函数中调用过程,还可以将例程参数或局部例程变量作为在
或INOUT
参数)。对于一个INOUT
参数,在将其传递给过程之前初始化其值。下面的过程有一个出
参数,该过程将其设置为当前服务器版本INOUT
该过程从当前值加1的值:
CREATE PROCEDURE (OUT ver_param VARCHAR(25), INOUT incr_param INT) BEGIN #设置OUT参数的值SELECT VERSION() INTO ver_param;INOUT参数的增量值SET incr_param = incr_param + 1;结束;
调用过程之前,初始化要传递的变量INOUT
参数。在调用过程之后,你可以看到这两个变量的值都被设置或修改了:
mysql> SET @增量= 10;mysql>调用p(@版本,@增量);mysql> SELECT @version, @increment;+--------------------+------------+ | @ 版| @increment | +--------------------+------------+ | 8.0.3-rc-debug-log | 11 | +--------------------+------------+
在准备调用
与连用的语句准备
而且执行
,占位符可用于在
参数,出
,INOUT
参数。这些类型的参数可以如下使用:
mysql> SET @增量= 10;mysql> PREPARE s FROM 'CALL p(??)”;mysql> EXECUTE USING @version, @increment;mysql> SELECT @version, @increment;+--------------------+------------+ | @ 版| @increment | +--------------------+------------+ | 8.0.3-rc-debug-log | 11 | +--------------------+------------+
编写C程序,使用调用
SQL语句来执行生成结果集的存储过程CLIENT_MULTI_RESULTS
必须启用Flag。这是因为调用
除了过程中执行的语句可能返回的任何结果集之外,还返回一个指示调用状态的结果。CLIENT_MULTI_RESULTS
如果也必须启用调用
用于执行包含预处理语句的任何存储过程。当加载这样一个过程时,无法确定这些语句是否产生结果集,因此有必要假设它们产生结果集。
CLIENT_MULTI_RESULTS
可以在通话时启用吗mysql_real_connect ()
,或者通过传递CLIENT_MULTI_RESULTS
标记本身,或通过传递隐式标记CLIENT_MULTI_STATEMENTS
(这也使得CLIENT_MULTI_RESULTS
).CLIENT_MULTI_RESULTS
默认启用。
处理的结果调用
语句使用mysql_query ()
或mysql_real_query ()
,使用调用mysql_next_result ()
以确定是否有更多的结果。示例请参见支持多语句执行.
C程序可以使用预处理语句接口来执行调用
语句和访问出
而且INOUT
参数。这是通过处理的结果调用
语句使用循环调用mysql_stmt_next_result ()
以确定是否有更多的结果。示例请参见准备好的CALL语句支持.提供MySQL接口的语言可以使用prepared调用
直接检索的语句出
而且INOUT
过程参数。
对存储程序引用的对象的元数据更改将被检测到,并在下次执行程序时自动重新解析受影响的语句。有关更多信息,请参见第8.10.3节“预处理语句和存储程序的缓存”.