mysql中看看这个存储过程老是报错

我的mysql版本是5.5.21的,下面这个存储过程是需要更加另外3张表的数据来更新strategycontracttemp中数据,但是每次更新到中途报错,先代码:

SQL code

CREATE PORCEDURE spInsST() BEGIN DECLARE v_ContractID INT; DECLARE v_SecurityTypeID INT; DECLARE v_ExchangeID INT; DECLARE v_VarietyID INT; DECLARE v_CurrencyID INT; DECLARE v_underlying text; DECLARE v_sec text; DECLARE v_exch INT; DECLARE v_exchangeName text; DECLARE v_currency INT; DECLARE v_fxrate DECIMAL(20,8); DECLARE v_commfee DECIMAL(20,8); DECLARE v_commFlag INT; DECLARE fig INT; DECLARE cur1 CURSOR FOR SELECT ContractID,SecurityTypeID,ExchangeID,VarietyID,CurrencyID,IFNULL(CommissionFee,0) AS comm1 FROM contractinfo ORDER BY ContractID; DECLARE CONTINUE HANDLER FOR NOT FOUND SET fig=1; OPEN cur1; REPEAT FETCH cur1 INTO v_ContractID,v_SecurityTypeID,v_ExchangeID,v_VarietyID,v_CurrencyID,v_commfee; SELECT VarietyNum INTO v_underlying FROM contractvariety WHERE VarietyID=v_VarietyID; UPDATE strategycontracttemp SET underlying=v_underlying WHERE id=v_ContractID; SELECT DValue INTO v_sec FROM dictionary WHERE DID=v_SecurityTypeID; UPDATE strategycontracttemp SET sec=v_sec WHERE id=v_ContractID; SELECT DValue,DName INTO v_exch,v_exchangeName FROM dictionary WHERE DID=v_ExchangeID; UPDATE strategycontracttemp SET exch=v_exch WHERE id=v_ContractID; UPDATE strategycontracttemp SET exchangeName=v_exchangeName WHERE id=v_ContractID; SELECT DValue INTO v_currency FROM dictionary WHERE DID=v_CurrencyID; UPDATE strategycontracttemp SET currency=v_currency WHERE id=v_ContractID; SET v_fxrate=(CASE v_CurrencyID WHEN 150001 THEN '6.239' WHEN 150002 THEN '7.761' WHEN 150003 THEN '1' WHEN 150004 THEN '77.61' WHEN 150005 THEN '0.6376' WHEN 150006 THEN '0.7655' WHEN 150007 THEN '0.9354' WHEN 150008 THEN '0.989' WHEN 150009 THEN '0.9129' WHEN 150010 THEN '1.2603' END); IF v_commfee=0 THEN SET v_commFlag=1; ELSE SET v_commFlag=2; END IF; UNTIL fig=1 END REPEAT; CLOSE cur1; END;

欢迎大家阅读《mysql中看看这个存储过程老是报错,该如何处理》,跪求各位点评,by 搞代码

Procedure execution failed

1172 - Result consisted of more than one row

郁闷啊,用游标实现的,但也不知道错在哪里。strategycontracttemp表中有1000多行数据的。

------解决方案--------------------

SELECT VarietyNum INTO v_underlying FROM contractvariety WHERE VarietyID=v_VarietyID;

UPDATE strategycontracttemp SET underlying=v_underlying WHERE id=v_ContractID;

SELECT DValue INTO v_sec FROM dictionary WHERE DID=v_SecurityTypeID;

UPDATE strategycontracttemp SET sec=v_sec WHERE id=v_ContractID;

SELECT DValue,DName INTO v_exch,v_exchangeName FROM dictionary WHERE DID=v_ExchangeID;

UPDATE strategycontracttemp SET exch=v_exch WHERE id=v_ContractID;

UPDATE strategycontracttemp SET exchangeName=v_exchangeName WHERE id=v_ContractID;

SELECT DValue INTO v_currency FROM dictionary WHERE DID=v_CurrencyID;

UPDATE strategycontracttemp SET currency=v_currency WHERE id=v_ContractID;/

这个select中可能有一句返回多条记录了

------解决方案--------------------

SELECT VarietyNum INTO v_underlying FROM contractvariety WHERE VarietyID=v_VarietyID;

SELECT DValue INTO v_sec FROM dictionary WHERE DID=v_SecurityTypeID;

检查返回结果,只能是单一值

------解决方案--------------------

SELECT VarietyNum INTO v_underlying FROM contractvariety WHERE VarietyID=v_VarietyID;

SELECT DValue INTO v_sec FROM dictionary WHERE DID=v_SecurityTypeID;

SELECT DValue,DName INTO v_exch,v_exchangeName FROM dictionary WHERE DID=v_ExchangeID;

SELECT DValue INTO v_currency FROM dictionary WHERE DID=v_CurrencyID;

微信 赏一包辣条吧~

支付宝 赏一听可乐吧~

Mysql存储过程老是报错_mysql中看看这个存储过程老是报错,该如何处理相关推荐

  1. ibatis mysql 同时删多个表报错_MySQL中Multiple primary key defined报错的解决办法

    MySQL中Multiple primary key defined报错的解决办法 创建主键可以有两种方式: create table 表名( 字段名 类型, 字段名 类型, -- primary k ...

  2. mysql server 卸载不了_Mysql卸载问题Start Server卡住报错解决方法

    遇到的问题:安装mysql最后一步的时候 start server打叉并且报错. 问题截图: 报错代码: Beginning configuration step: Writing configura ...

  3. mysql 子查询怎么写_MySQL中两种子查询的写法

    MySQL的测试环境 测试表如下 create table test_table2 ( id int auto_increment primary key, pay_id int, pay_time ...

  4. mysql 浮点类型和定点_mysql 中的浮点和定点类型

    前面一段实验是引用别人的,后面作了一点补充 MySQL浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如 float(7,4)的 ...

  5. mysql视图的更新 条件_mysql中视图更新详解

    视图的可更新性与视图中查询的定义是有关的 一.mysql中那些试图使不可更新的?以下类型的视图是不可更新的 1.包含以下关键字的sql语句:聚合函数(sum.min.max.count).distin ...

  6. android项目模块导入eclipse编译报错,android中studio导入eclipse项目报错怎么办

    android中studio导入eclipse项目报错怎么办 发布时间:2020-07-15 17:34:45 来源:亿速云 阅读:96 作者:清晨 这篇文章将为大家详细讲解有关android中stu ...

  7. mysql创建临时表 主键_MySQL中临时表的基本创建与使用教程

    当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询. ...

  8. mysql 建表报错_mysql innodb 引擎 ,建表时报错:ERROR 1118 (42000)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 mysql 5.7.20 当我在建表时,完整报错信息如下: ERROR 1118 (42000): Row size too large (> 81 ...

  9. mysql去除select换行符_MySQL中去除字段中的回车符和换行符

    问题: 在使用[ load data infile 'D:/node.txt' into table node fields terminated by '\t'; ]语句批量导入如下图所示的aaa. ...

最新文章

  1. html的编辑器有几种,各种系统下HTML用哪种编辑器
  2. opengl加载显示3D模型Q3O类型文件
  3. Build 2019 上微软的开源动作有点不一样
  4. pat 乙级 1056 组合数的和(C++)
  5. php 列表 单击事件,首页gt; PHPgt;如何添加点击事件到jstree的(jQuery插件)异步列表?...
  6. camera(24)---camera 客观测试 Imatest教程--噪声测试
  7. Java基础学习总结(118)——单元测试的必要性和重要性
  8. 【Win10 应用开发】实现数据的增量加载
  9. 事务注解放到类上面 下面私有方法有效吗_【面试】足够应付面试的Spring事务源码阅读梳理(建议珍藏)...
  10. 安卓intent发起广播事件给系统或当前app,并从系统或当前app中接收广播
  11. 对象tostring后怎么转成对象_对象出轨了怎么办?对象出轨正常处理方式
  12. html5 (个人笔记)
  13. 通信原理第七版樊昌信 课后习题答案详解
  14. roboware studio教程_使用roboware创建工作空间
  15. 免费微信登陆界面html模板,微信小程序:使用微信授权登录以及页面模板
  16. Monte-Carlo Dropout(蒙特卡罗 dropout),Aleatoric Uncertainty,Epistemic Uncertainty
  17. spring boot打包本地idea跑能行,上线jar包跑不行 解决
  18. Cesium实时目标跟踪最新特效教程系列1—实时发亮直线跟踪移动目标
  19. 阿里云搭建自己的anki服务器
  20. 【C语言】冷知识——前置++和后置++

热门文章

  1. 腾讯基础设施 20 年演进之路
  2. 软件正在吞噬整个世界?!
  3. 字节跳动(今日头条),战斗力为何如此凶猛?| 畅言
  4. 微信说不!有何不可?
  5. CTO 职场解惑指南系列(一)
  6. 程序员如何内外兼修?
  7. 甲骨文被曝服务器漏洞,攻击者窃获 22.6 万美元加密货币
  8. Java多线程同步数据库,源码+原理+手写框架
  9. 字节跳动面试真题:安装kafka集群
  10. 字节跳动面试:java实例化对象必须调用类的构造方法