mysql call_mysql8 参考手册--CALL语句

CALL sp_name([parameter[,...]])

CALL sp_name[()]

该CALL语句调用先前用定义的存储过程 CREATE PROCEDURE。

可以不带括号地调用不带参数的存储过程。也就是说,CALL p()并且 CALL p是等效的。

CALL可以使用声明为OUT或INOUT参数的参数将值传递回其调用方 。当过程返回时,客户端程序还可以获得在例程中执行的最终语句所影响的行数:在SQL级别,调用ROW_COUNT()函数;在SQL级别上,调用 函数。从C API中,调用该 mysql_affected_rows()函数。

有关未处理条件对过程参数的影响的信息,请参见 第13.6.7.8节“条件处理和OUT或INOUT参数”。

要使用OUT或INOUT参数从过程中获取值 ,请通过用户变量传递参数,然后在过程返回后检查变量的值。(如果要从另一个存储过程或函数中调用过程,则还可以将例程参数或局部例程变量作为IN或INOUT 参数INOUT传递。)对于参数,请将其值初始化,然后再将其传递给过程。以下过程具有OUT该过程设置为当前服务器版本的参数,以及 INOUT该过程从其当前值增加一个的值:

CREATE PROCEDURE p (OUT ver_param VARCHAR(25), INOUT incr_param INT)

BEGIN

# Set value of OUT parameter

SELECT VERSION() INTO ver_param;

# Increment value of INOUT parameter

SET incr_param = incr_param + 1;

END;

在调用该过程之前,请初始化要作为INOUT参数传递的变量。调用该过程后,将设置或修改两个变量的值:

mysql> SET @increment = 10;

mysql> CALL p(@version, @increment);

mysql> SELECT @version, @increment;

+--------------------+------------+

| @version | @increment |

+--------------------+------------+

| 8.0.3-rc-debug-log | 11 |

+--------------------+------------+

在CALL与PREPARE和 EXECUTE一起使用的准备好的语句中,占位符可用于IN参数OUT和 INOUT。这些类型的参数可以按如下方式使用:

mysql> SET @increment = 10;

mysql> PREPARE s FROM 'CALL p(?, ?)';

mysql> EXECUTE s USING @version, @increment;

mysql> SELECT @version, @increment;

+--------------------+------------+

| @version | @increment |

+--------------------+------------+

| 8.0.3-rc-debug-log | 11 |

+--------------------+------------+

要编写使用CALLSQL语句执行产生结果集的存储过程的C程序, CLIENT_MULTI_RESULTS必须启用该 标志。这是因为CALL,除了在过程中执行的语句可能返回的任何结果集之外,每个返回的结果还指示调用状态。CLIENT_MULTI_RESULTS如果CALL用于执行包含准备好的语句的任何存储过程,则还必须将其启用。无法确定何时加载这样的过程是否这些语句将产生结果集,因此有必要假设它们会产生结果集。

CLIENT_MULTI_RESULTS可以在您调用时启用mysql_real_connect(),可以通过传递CLIENT_MULTI_RESULTS 标志本身来显式地传递CLIENT_MULTI_STATEMENTS,也可以通过传递来隐式传递 (这也启用 CLIENT_MULTI_RESULTS)。 CLIENT_MULTI_RESULTS默认情况下启用。

要处理CALL 使用mysql_query()或 执行的语句 的结果mysql_real_query(),请使用一个循环,该循环调用mysql_next_result()以确定是否还有更多结果。有关示例,请参见 第28.7.22节“ C API多语句执行支持”。

C程序可以使用Prepared-Statement接口执行 CALL语句以及访问 OUT和INOUT参数。这是通过CALL使用循环来处理语句的结果来完成的,该 循环调用mysql_stmt_next_result()以确定是否还有更多结果。有关示例,请参见 第28.7.24节“ C API编写的CALL语句支持”。提供MySQL接口的语言可以使用准备好的 CALL语句直接检索OUT和INOUT 处理参数。

检测到存储程序引用的对象的元数据更改,并在下次执行该程序时导致受影响语句的自动重新分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值