call 在mysql,MySQL的SQL语句 - 数据操做语句(1)- CALL 语句

CALL 语句

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

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

若是存储过程不带参数,调用时能够在不带括号。也就是说,CALL p() 和CALL p是等价的。

CALL 可使用声明为 OUT或 INOUT的参数将值回传给它的调用者。当过程返回时,客户端程序还能够得到例程中执行的最后一条语句所影响的行数:在 SQL级别,调用 ROW_COUNT()函数;在 C API中,调用mysql_affected_rows()函数。

要使用 OUT 或 INOUT参数从过程当中获取值,请经过用户变量传递该参数,而后在过程返回后检查变量的值。(若是从另外一个存储过程或函数中调用该过程,还能够将例程参数或本地例程变量做为 IN或 INOUT参数传递。)对于 INOUT参数,请在将其传递给过程以前对其值进行初始化。下面的过程有一个 OUT参数,该过程将其设置为当前服务器版本,以及一个INOUT值,该过程将其当前值递增 1:

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 |+--------------------+------------+

在用于 PREPARE 和 EXECUTE的预编译 CALL语句中,占位符能够用于 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 |+--------------------+------------+

要编写使用 CALL SQL 语句执行产生结果集的存储过程的 C程序,必须启用 CLIENT_MULTI_RESULTS标志。这是由于除了过程当中执行的语句可能返回的结果集以外,每一个 CALL还返回一个结果来指示调用状态。若是使用CALL执行任何包含预编译语句的存储过程,也必须启用CLIENT_MULTI_RESULTS。在加载过程当中不能肯定这些语句是否会产生结果集,所以有必要假定它们会产生结果集。

能够在调用 mysql_real_connect() 时显式地传递CLIENT_MULTI_RESULTS标志自己,或者隐式传递CLIENT_MULTI_STATEMENTS来启用 CLIENT_MULTI_RESULTS。默认状况下 CLIENT_MULTI_RESULTS是启用的。

要处理使用 mysql_query() 或 mysql_real_query()执行的 CALL语句的结果,可使用一个调用 mysql_next_result()的循环来肯定是否有更多的结果。

C 程序可使用预编译语句接口来执行 CALL语句并访问 OUT和 INOUT参数。这是经过使用循环处理 CALL语句的结果来完成的,该循环调用mysql_stmt_next_result()来肯定是否有更多的结果。提供 MySQL接口的语言可使用预编译的 CALL语句直接检索 OUT和 INOUT过程参数。

存储程序引用的对象的元数据更改将被检测到,并在下次执行程序时自动从新解析受影响的语句。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值