查看“MySQL 语句:数据处理语句(DML)”的源代码
←
MySQL 语句:数据处理语句(DML)
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:MySQL]] == 关于 == == CALL 语句 == <syntaxhighlight lang="mysql"> CALL sp_name([parameter[,...]]) CALL sp_name[()] </syntaxhighlight> * CALL语句调用先前用“CREATE PROCEDURE”定义的存储过程。 * 可以不带括号地调用不带参数的存储过程。也就是说,“CALL p()”和“CALL p”是等效的。 * 【见:'''“[http://wiki.eijux.com/MySQL_%E8%AF%AD%E5%8F%A5%EF%BC%9A%E6%95%B0%E6%8D%AE%E5%AE%9A%E4%B9%89%E8%AF%AD%E5%8F%A5%EF%BC%88DDL%EF%BC%89#CREATE_PROCEDURE_.E5.92.8C_CREATE_FUNCTION_.E8.AF.AD.E5.8F.A5 CREATE PROCEDURE 和 CREATE FUNCTION 语句]”'''】 CALL可以使用声明为'''OUT'''或'''INOUT'''参数的参数将值传递回其调用方。当过程返回时,Client 端程序也可以获得在例程中执行的最终语句所影响的行数:在 SQL 级别,调用“'''ROW_COUNT()'''”函数;从 C API 中,调用“'''mysql_affected_rows()'''”函数。 * 对于“INOUT”参数,在将其值传递给过程之前对其进行初始化。 * 在与“PREPARE”和“EXECUTE”一起使用的已准备好的 CALL 语句中,占位符可用于 IN 参数,OUT 和 INOUT 参数。 示例:以下过程具有一个 OUT 参数,该参数将该过程设置为当前服务器版本,以及一个 INOUT 值,该过程从其当前值开始加一: <syntaxhighlight lang="mysql"> 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; </syntaxhighlight> 在调用该过程之前,初始化要作为INOUT参数传递的变量。调用该过程后,将设置或修改两个变量的值: <syntaxhighlight lang="mysql"> mysql> SET @increment = 10; mysql> CALL p(@version, @increment); mysql> SELECT @version, @increment; +------------------+------------+ | @version | @increment | +------------------+------------+ | 5.7.20-debug-log | 11 | +------------------+------------+ </syntaxhighlight> 示例:在与 PREPARE 和 EXECUTE 一起使用的已准备好的 CALL 语句中,占位符可用于 IN 参数,OUT 和 INOUT 参数。这些类型的参数可以按如下方式使用: <syntaxhighlight lang="mysql"> mysql> SET @increment = 10; mysql> PREPARE s FROM 'CALL p(?, ?)'; mysql> EXECUTE s USING @version, @increment; mysql> SELECT @version, @increment; +------------------+------------+ | @version | @increment | +------------------+------------+ | 5.7.20-debug-log | 11 | +------------------+------------+ </syntaxhighlight> * 关于“'''CLIENT_MULTI_RESULTS'''”:【???】 *# 要编写使用CALL SQL 语句执行生成结果集的存储过程的 C 程序,必须启用“CLIENT_MULTI_RESULTS”标志。这是因为,除了过程中执行的语句可能返回的任何结果集之外,每个 CALL 还会返回指示呼叫状态的结果。如果将 CALL 用于执行任何包含准备好的语句的存储过程,则也必须启用“CLIENT_MULTI_RESULTS”。无法确定何时加载此类过程是否会产生这些语句,因此有必要假设它们会产生结果。 *# 可以在调用“mysql_real_connect()”时启用“CLIENT_MULTI_RESULTS”,或者通过传递“CLIENT_MULTI_RESULTS”标志本身来显式,或者通过“CLIENT_MULTI_RESULTS”隐式传递(也将启用“CLIENT_MULTI_RESULTS”)。 “CLIENT_MULTI_RESULTS”默认启用。 * 要处理使用“mysql_query()”或“mysql_real_query()”执行的 CALL 语句的结果,请使用调用“mysql_next_result()”的循环来确定是否还有更多结果。【???】 * C 程序可以使用 Prepared-Statement 接口执行 CALL 语句并访问 OUT 和 INOUT 参数。这是通过使用调用“mysql_stmt_next_result()”的循环以确定是否还有更多结果来处理CALL语句的结果来完成的。【???】 == DELETE 语句 == == DO 语句 == == HANDLER 语句 == == INSERT 语句 == == LOAD DATA 语句 == == LOAD XML 语句 == == REPLACE 语句 == == SELECT 语句 == == 【子查询】 == * 见:“[[MySQL 语句:数据处理语句(DML):子查询]]” == UPDATE 语句 ==
返回至“
MySQL 语句:数据处理语句(DML)
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息