首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

错误1172 (42000):mysql存储过程上的结果包含多行

错误1172 (42000):mysql存储过程上的结果包含多行是指在MySQL存储过程中,返回的结果集包含多行数据,而存储过程只能返回单行结果集。

MySQL存储过程是一组预编译的SQL语句集合,可以在数据库中进行重复性操作。存储过程可以接收参数,并且可以返回结果集或输出参数。

当在存储过程中执行查询语句时,如果查询结果包含多行数据,就会出现错误1172。这是因为存储过程只能返回单行结果集,无法处理多行结果集。

解决这个问题的方法有两种:

  1. 使用游标(Cursor):游标可以用来处理多行结果集。在存储过程中,可以使用游标来遍历查询结果,并逐行处理数据。具体的使用方法可以参考MySQL官方文档中的游标相关内容。
  2. 使用临时表:可以将查询结果存储在临时表中,然后在存储过程中使用该临时表进行后续操作。通过创建临时表,可以将多行结果集转换为单行结果集,从而避免错误1172的问题。

在腾讯云的云数据库MySQL中,可以使用腾讯云提供的云数据库MySQL版(TencentDB for MySQL)来进行存储过程的开发和管理。该产品提供了稳定可靠的MySQL数据库服务,支持存储过程的执行和管理。具体的产品介绍和使用方法可以参考腾讯云官方网站上的相关文档和教程。

链接地址:https://cloud.tencent.com/product/cdb_mysql

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • MySQL或者MariaDB里面sql_mode设置详解

    如果你使用非事务存储引擎,这种方式不是你想要,因为出现错误前进行数据更改不会“滚动”,结果是更新“只进行了一部分”。...但是需要注意问题是,如果数据库运行在严格模式下,并且你存储引擎不支持事务(现在基本都是用InnoDB引擎了,不支持事务较少见),那么有数据不一致风险存在,比如一组sql中有两个dml语句,如果后面的一个出现了问题...NO_ENGINE_SUBSTITUTION不使用默认引擎替代 设置这个参数后,如果需要存储引擎被禁用或未编译,那么抛出错误。...当新插入行不包含某列没有显示定义DEFAULT子句值,则该值被丢失。...如果语句插入或修改多行,并且坏值出现在第2或后面的行,结果取决于启用了哪个严格选项: 对于STRICT_ALL_TABLES,MySQL返回错误并忽视剩余行。

    2.3K20

    mysql sql-mode 解析和设置

    在非严格模式,可以接受该日期,但会生成警告 ERROR_FOR_DIVISION_BY_ZERO: 在严格模式,在INSERT或UPDATE过程中,如果被零除(或MOD(X,0)),则产生错误(否则为警告...NO_ENGINE_SUBSTITUTION: 如果需要存储引擎被禁用或未编译,那么抛出错误。...对于本文开头中提到错误,可以先把sql_mode设置为ANSI模式,这样便可以插入数据,而对于除数为0结果字段值,数据库将会用NULL值代替。...如果你使用非事务存储引擎,这种方式不是你想要,因为出现错误前进行数据更改不会“滚动”,结果是更新“只进行了一部分”。...如果不能将给定值插入到事务表中,则放弃该语句。对于非事务表,如果值出现在单行语句或多行语句第1行,则放弃该语句。

    1.6K20

    笔记 | 一条SQL查询语句是如何执行

    ,比如存储过程、触发器、视图等#存储引擎 层而存储引擎层负责数据存储和提取。...现在最常用存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎图片#连接器第一步,你会先连接到这个数据库,这时候接待你就是连接器。...它也要把字符串“T”识别成“表名 T”,把字符串“ID”识别成“列 ID”2.第二就要做“语法分析”判断你输入这个 SQL 语句是否满足 MySQL 语法一般语法错误会提示第一个出现错误位置,所以你要关注是紧接...(在工程实现,如果命中查询缓存,会在查询缓存返回结果时候,做权限验证。...3.执行器将上述遍历过程中所有满足条件行组成记录集作为结果集返回给客户端。

    1.1K101

    Mysql自定义函数和自定义过程

    DETERMINISTIC 表示结果是确定。每次执行存储过程时,相同输入会得到 相同输出。 [NOT] DETERMINISTIC 表示结果是不确定,相同输入可能得到不同输出。...t3表是我们一节创建表 这里逻辑是 1、先判断是否有Proc() 这个存储过程,有就drop掉 2、创建Proc() 存储过程 3、执行Proc() 存储过程 注意:“DELIMITER //”...和mysql_error_code都可以表示mysql错误 sqlstate_value为长度5字符串错误代码 mysql_error_code为数值类型错误代码,例如:ERROR1142(42000...,实际一样 查询语句可能查询出多条记录,在存储过程和函数中使用光标来逐条读取查询结果集中记录。...调用存储过程后,数据库系统将执行存储过程语句。 然后,将结果返回给输出值。

    4.4K20

    MySQL核心知识》第10章:自定义存储过程和函数

    DETERMINISTIC 表示结果是确定。每次执行存储过程时,相同输入会得到相同输出。[NOT] DETERMINISTIC 表示结果是不确定,相同输入可能得到不同输出。...和MySQL_error_code都可以表示MySQL错误 sqlstate_value为长度5字符串错误代码 MySQL_error_code为数值类型错误代码,例如:ERROR1142(42000...*/ CALL handlerdemo(); /* 查看调用存储过程结果*/ SELECT @X @X是一个用户变量,执行结果@X等于3,这表明MySQL执行到程序末尾。...这里变量跟SQLSERVER没有什么区别,都是用来存储临时值 光标 MySQL里叫光标,SQLSERVER里叫游标,实际一样 查询语句可能查询出多条记录,在存储过程和函数中使用光标来逐条读取查询结果集中记录...调用存储过程后,数据库系统将执行存储过程语句。 然后,将结果返回给输出值。

    3.6K10

    从头开始学MySQL——-存储过程存储函数(1)

    [Err] 1172 – Result consisted of more than one row 所以需要在存储过程SQL后面加上LIMIT 1。...10.1.2 创建存储函数 存储函数与存储过程本质是一样,都是封装一系列SQL语句,简化调用。 我们自己编写存储函数可以像MySQL函数那样自由被调用。...@result值为2结果说明了存储过程执行到结尾。从表中结果来看,也是正确插入了两条数据。...总之,下面的核心知识点没有疑问:在声明条件后并遇到相关错误条件后,那就看应该怎么处理。如果是EXIT,那么存储过程只生效到错误一条SQL。...阅读更多 从头开始学MySQL——-存储过程存储函数(1) 从头开始学MySQL——-存储过程存储函数(2) 从头开始学MySQL——-存储过程存储函数(3) 从头开始学MySQL——-

    44630

    一文搞懂select语句在MySQL执行流程!

    从逻辑,我们可以将MySQL粗略地分成三层:Server层、存储引擎层和系统文件层,而Server层中又可以分成网络连接层(连接器)和数据服务层(Server层)。...Server层中包含了连接器、查询缓存、分析器、优化器和执行器等MySQL核心组成部分,另外,在Server层中还包含了所有的内置函数(比如:日期时间函数、加解密函数、聚合函数、数学函数等),存储引擎...首先会进行打开数据表操作,此时优化器会根据创建表时使用存储引擎,使用相应存储引擎接口执行查询操作。这里,我们举一个例子: 假设,我们在id字段没有建立索引,执行器执行流程大致如下所示。...(2)继续通过存储引擎读取下一行数据,执行与(1)相同逻辑判断,直到处理完user表中所有数据。 (3)处理完所有的数据后,执行器就会将结果集中数据返回给客户端。...不过在有些场景下,执行器调用一次,存储引擎内部会会扫描多行,这就导致存储引擎扫描行数与rows_examined字段标识行数并不完全相同。

    4K20

    2018-11-23 当我们输入一条 SQL 查询语句时,发生了什么?

    ,却不知道这条语句在 MySQL 内部执行过程。...Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎功能都在这一层实现,比如存储过程...查询缓存失效非常频繁,只要有对一个表更新,这个表所有的查询缓存都会被清空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大数据库来说,查询缓存命中率会非常低。...执行器将上述遍历过程中所有满足条件行组成记录集作为结果集返回给客户端。 至此,这个语句就执行完成了。 对于有索引表,执行逻辑也差不多。...在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟 rows_examined 并不是完全相同

    78050

    MySql 入门到精通-sql查询语句执行过程,你真的知道吗?

    MySql 大部分核心功能都在这一层完成,像它所有内置函数,比如时间函数和日期函数等,也就是说所有的跨存引擎功能均是在 Server 这层去实现,比如,视图、触发器以及存储过程等。...接着 MySQL 就会做 “语法分析”,根据上述词法分析结果,语法分析器会根据语法规则,判断我们输入 SQL 语句是否满足 MySQL 语法。...执行器将上述遍历过程中所有满足条件行组成记录集作为结果集返回给客户端。 这样,这条 SQL 语句就执行结束了。...不过,在有一些场景下,执行器执行一次,而在引擎内部却扫描了多行,所以,引擎扫描行数跟 rows_examined 并不是完全相同,我们后面会在 MySQL 存储引擎内部机制中进行讲解。...总结 今天,我们主要学习了 MySQL 逻辑架构,知道了其主要有两大部分 Server 和存储引擎层组成,然后,我们通过对于一条 SQL 语句分析知道了其在MySQL所有执行过程,主要从连接器

    1.1K30

    MySQL实战 -- 一条SQL查询语句是如何执行

    MySQL 内部执行过程。...Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎功能都在这一层实现,比如存储过程...查询缓存失效非常频繁,只要有对一个表更新,这个表所有的查询缓存都会被清空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大数据库来说,查询缓存命中率会非常低。...执行器将上述遍历过程中所有满足条件行组成记录集作为结果集返回给客户端。 至此,这个语句就执行完成了。 对于有索引表,执行逻辑也差不多。...在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟 rows_examined 并不是完全相同。我们后面会专门有一篇文章来讲存储引擎内部机制,里面会有详细说明。

    1.5K30

    MySQL自定义函数与存储过程示例

    (1); ERROR 1305 (42000): FUNCTION rms.queryNameById does not exist mysql> 3、存储过程 存储功能和自定义函数相似,也是一组完成特定功能...默认结束命令字符为分号,当存储过程包含多条语句时,遇到第一个分号会作为存储过程结束标志。这样不符合预期,因此需要修改默认结束命令字符。 DELIMITER //就是将结束命令字符修改为//。...调用存储过程命令为:call 存储过程名称。...| +--------------+ 1 row in set (0.03 sec) Query OK, 0 rows affected (0.04 sec) 修改存储过程 如果想创建存储过程内容可以先删除再重新创建存储过程...c、自定义函数必须要包含return语句,而存储过程则不需要。

    1.7K10

    MySQL实战第一讲 - 一条SQL查询语句是如何执行

    如下图1给出MySQL 基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL 各个功能模块中执行过程。 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。...Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎功能都在这一层实现,比如存储过程...查询缓存失效非常频繁,只要有对一个表更新,这个表所有的查询缓存都会被清空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大数据库来说,查询缓存命中率会非常低。...开始执行时候,要先判断一下你对这个表 T 有没有执行查询权限,如果没有,就会返回没有权限错误。如下所示 (在工程实现,如果命中查询缓存,会在查询缓存返回结果时候,做权限验证。...在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟 rows_examined 并不是完全相同。我们后面会专门有一篇文章来讲存储引擎内部机制,里面会有详细说明。

    55830

    一条sql查询语句执行过程解析

    客户端 server层:(所有跨存储引擎操作均在这一层完成,包含下面mysql核心功能及内置函数均在这一层完成) 连接器、查询缓存->分析器、优化器、执行器 存储层:(负责数据存储和提取,其架构模式是插件式...因为mysql在执行过程中临时使用内存是管理在连接对象里面的,只有在连接断开后,内存再会被释放。...这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建状态。 show processlist; 查询缓存 建立连接后,会优先查询缓存,若对应缓存存在,则直接返回结果。...查询缓存已key->value形式存储在内存中,key为查询sql,value为查询结果。 若有对一个表进行更新,那么这个表所有查询缓存均会失效。因此,查询缓存弊往往大于利,不建议使用。...执行器将上述遍历过程中所有满足条件行组成记录集作为结果集返回给客户端。 这些接口都是引擎中已经定义好

    61830

    一条SQL查询语句是如何执行

    本篇文章将通过一条 SQL 执行过程来介绍 MySQL 基础架构。...MySQL 基本架构 ? 大体MySQL 分为 Server 层和存储引擎层两部分。...Server 层包括连接器、查询缓存、分析器、执行器等,以及所有的内置函数(如日期、时间、数学和加密函数等)和跨存储引擎功能(如存储过程、触发器、视图)。...存储引擎层负责数据存储和提取,支持 InnoDB、MyISAM、Memory 等多个存储引擎。MySQL 5.5.5 版本后默认存储存储引擎是 InnoDB。...如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,会提升效率。 但是查询缓存失效非常频繁,只要有对一个表更新,这个表所有的查询缓存都会被清空。

    1.8K30

    一条查询SQL在MySQL中是怎么执行

    ”组成,在这个过程中逐步揭开MySQL面纱,对MySQL有个深入理解。...从上图来看,MySQL大体可以分为Server层和存储引擎层两部分。...Server层:包含连接器、查询缓存、分析器、优化器、执行器等,涵盖了MySQL大部分核心服务功能,以及所有的内置函数,所有的跨存储引擎功能都在这一层实现,比如存储过程、触发器、视图等, 存储引擎层...其中最常用存储引擎是InnoDB,从MySQL5.5.5版本开始就成为了默认存储引擎。...在数据库慢查询日志中可以看到一个rows_examined字段,表示这个语句执行过程中扫描了多少行,这个值是在执行器每次调用引擎时候累加,有时候执行器调用一次,在引擎内部扫描了多行,隐藏引擎扫描行数跟

    4.8K20

    深入理解SQL原理:一条SQL查询语句是如何执行

    本篇文章将通过一条 SQL 执行过程来介绍 MySQL 基础架构。...MySQL 基本架构 ? 大体MySQL 分为 Server 层和存储引擎层两部分。...Server 层包括连接器、查询缓存、分析器、执行器等,以及所有的内置函数(如日期、时间、数学和加密函数等)和跨存储引擎功能(如存储过程、触发器、视图)。...存储引擎层负责数据存储和提取,支持 InnoDB、MyISAM、Memory 等多个存储引擎。MySQL 5.5.5 版本后默认存储存储引擎是 InnoDB。...如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,会提升效率。 但是查询缓存失效非常频繁,只要有对一个表更新,这个表所有的查询缓存都会被清空。

    2.7K30

    MySQLsql_mode参数

    MySQLsql_mode参数 sql_mode参数详解 首先我们看看mysql中默认sql_mode值是什么: root@localhost :(none)09:25:15>select...,包含id和nam两列,sql_mode参数存在不允许我们对个结果nam列进行group by,但是当我们select nam时候,就可以进行group by操作。...在STRICT_TRANS_TABLES模式下,插入数据时,mysql会严格进行数据校验,当发现插入列值未满足要求,直接报告error错误,保证了错误数据无法插入到数据库中。...不设置此值时,用默认存储引擎替代,并抛出一个异常。...如果未给出该模式,被零除时MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作结果为NULL。

    1.5K10
    领券