CALL 语句

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

1. 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:

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

2. BEGIN

3. # Set value of OUT parameter

4. SELECT VERSION() INTO ver_param;

5. # Increment value of INOUT parameter

6. SET incr_param = incr_param + 1;

7. END;

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

1. mysql> SET @increment = 10;

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

3. mysql> SELECT @version, @increment;

4. +--------------------+------------+

5. | @version | @increment |

6. +--------------------+------------+

7. | 8.0.3-rc-debug-log | 11 |

8. +--------------------+------------+

在用于 PREPARE 和 EXECUTE 的预编译 CALL 语句中,占位符可以用于 IN 参数、OUT 和 INOUT 参数。这些类型的参数可以使用如下:

1. mysql> SET @increment = 10;

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

3. mysql> EXECUTE s USING @version, @increment;

4. mysql> SELECT @version, @increment;

5. +--------------------+------------+

6. | @version | @increment |

7. +--------------------+------------+

8. | 8.0.3-rc-debug-log | 11 |

9. +--------------------+------------+

要编写使用 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 过程参数。

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

mysql select call_MySQL的SQL语句 - 数据操作语句(1)- CALL 语句相关推荐

  1. mysql load xml_MySQL的SQL语句 - 数据操作语句(10)- LOAD XML 语句

    LOAD XML 语句 1. LOAD XML 2. [LOW_PRIORITY | CONCURRENT] [LOCAL] 3. INFILE 'file_name' 4. [REPLACE | I ...

  2. mysql修改的值子查询语句_MySQL的SQL语句 - 数据操作语句(13)- 子查询(13)

    子查询的限制 ● 通常,不能在子查询中修改表并从同一表中进行选择.例如,此限制适用于以下形式的语法: 1. DELETE FROM t WHERE ... (SELECT ... FROM t ... ...

  3. mysql的values使用_MySQL的SQL语句 - 数据操作语句(16)- VALUES 语句

    VALUES 语句 VALUES 是 MySQL 8.0.19 中引入的一个 DML 语句,它以表的形式返回一个或多个行的集合.换句话说,它是一个表值构造器,也可以作为独立的 SQL 语句来运行. 1 ...

  4. mysql select count 5万条数据很慢_Mysql注入总结

    1 0X00 简介 本文是关于Mysql注入相关知识的总结,Mysql利用方式较为灵活,这里总结了一些常用的姿势. 1 0x01 union select注入 http://127.0.0.1/?id ...

  5. mysql创建表参数_MySQL创建数据表(CREATE TABLE语句)

    在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...

  6. mysql创建销售表_MySQL创建数据表(CREATE TABLE语句)

    在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...

  7. SQL中数据操作语言 (DML) 和数据定义语言 (DDL)

     可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法.但是 SQL 语言也包含用于更新.插入和删除记录的语法. ...

  8. mysql遍历resultset_java中ResultSet遍历数据操作

    1.查找数据库中表的列名 String sql = "select *from tblmetadatainfo"; ResultSet rs = MySqlHelper.execu ...

  9. php实现sql server数据导入到mysql数据库_php实现SQL Server数据导入Mysql数据库(示例)...

    php将mssql的数据导入到mysql数据库中,代码: 代码示例: //连接SQL server数据库 $conn=mssql_connect("localhost"," ...

最新文章

  1. spark运行NLP
  2. 基于Spring可扩展Schema提供自定义配置支持(spring配置文件中 配置标签支持)
  3. C++98C++11的区别
  4. 你写的Python代码规范吗?
  5. 爬虫-request库-get请求
  6. win7下安装linux(CentOS)过程中遇到的问题总结
  7. EmEditor小功能与使用技巧
  8. 5岁儿童自学python编程-为什么外国5岁孩子就要学编程?原因你一定想知道
  9. 关于 FleaPHP
  10. 利用百度点击原理提升关键词排名
  11. 爬虫基础知识+Scrapy框架
  12. simplest_ffmpeg_demuxer_simple(新版ffmpeg函数)
  13. Kaggle数据竞赛记录 - Steel Defect Detection
  14. Altium Designer 18绘制一个STM32+SD卡 的系统原理图设计
  15. (加快设计)推荐一个SketchUp的3D模型库
  16. 耦合(六种)与 内聚(七种)—《软件工程与计算》笔记
  17. Python爬虫突然提取不出信息了,返回的是空列表的解决办法
  18. 罗素问题 ——来自知乎大神
  19. 美参议员Cynthia Lummis:基础设施法案是“华盛顿滑稽动作”,美国将在科技创新上落后中国
  20. SaltStack安装踩坑之路

热门文章

  1. 给开源项目贡献代码_您可以为开源做出6种非代码贡献
  2. 为什么我选择工作很难做选择_为什么公开工作(即使很难)
  3. ubuntu 开源镜像_Ubuntu手机可能对开源意味着什么
  4. 使用jquery版本的viewer.js图片更新的问题
  5. 下载Bootstrap3源码版本
  6. Bootstrap 模态框插件Modal 的选项
  7. es6 Reflect对象的静态方法
  8. es6 实例:消除魔术字符串
  9. php限制只能中文,php如何实现一个账号只能有一个人登录
  10. oracle不同环境数据迁移,生产环境下,oracle不同用户间的数据迁移。第一部分