加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql call_mysql CALL语法使用详解

发布时间:2022-09-23 15:55:05 所属栏目:MySql教程 来源:
导读:  mysql CALL语法使用详解2019-09-10 09:56

  CALL语法

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

  CALL sp_name[()]

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

  不带括号的
  mysql CALL语法使用详解2019-09-10 09:56
 
  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()函数。
 
  有关未处理条件对过程参数的影响的信息,请参见 第13.6.7.5节“条件处理和OUT或INOUT参数”。
 
  要使用OUTor 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 |
 
  +------------------+------------+
 
  | 5.5.58-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 |
 
  +------------------+------------+
 
  | 5.5.58-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()or 执行的语句 的结果mysql_real_query()mysql使用,请使用调用的循环mysql_next_result()来确定是否有更多结果。
 
  C程序可以使用prepared-statement接口来执行 CALL语句,访问 OUT和INOUT参数。
 
  这是通过CALL使用循环处理语句的结果来完成的,该循环调用mysql_stmt_next_result()以确定是否有更多结果。
 
  提供MySQL接口的语言可以使用预准备 CALL语句直接检索OUT和INOUT 过程参数。
 

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!