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

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;

e7ce419cf2d6ad34d01da2ceb8829eed.png

微信 赏一包辣条吧~

023a57327877fb4402bcc76911ec18ea.png

支付宝 赏一听可乐吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值