MYSQL中为什么调用这个存储过程老是报错啊
我的MYSQL版本是5.5.21,写了个插入数据的存储过程,但是在调用的时候老报错,这个存储过程代码:
CREATE PROCEDURE spInscontractinfo(IN v_SymbolNum varchar(20), -- 合约号IN v_ContractName varchar(24), -- 合约名称IN v_ExchangeID int(11), -- 交易所IDIN v_MaxMarketOrderVolume int(11), -- 市价单最大下单量IN v_MinMarketOrderVolume int(11), -- 市价单最小下单量IN v_MaxLimitOrderVolume int(11), -- 限价单最大下单量IN v_MinLimitOrderVolume int(11), -- 限价单最小下单量IN v_StartDeliveryDate date, -- 开始交割日期IN v_EndDeliveryDate date, -- 结束交割日期IN v_OpenDate date, -- 上市日期IN v_ExpireDate date, -- 过期日期IN v_VolumeMultiple int(11), -- 合约数量乘数IN v_PriceTick decimal(20,8), -- 最小变动价格IN v_IsTrading tinyint(1), -- 当前是否交易IN v_IsAvailable tinyint(1), -- 合约是否有效IN v_Price decimal(20,8), -- 价格IN v_PriceUnit varchar(20), -- 单位/价格IN v_Unit varchar(20), -- 单位/手(每手最小单位)IN v_CurrencyID int(11), -- 货币单位IDIN v_CommissionFee decimal(20,8), -- 手续费IN v_CommissionRate decimal(20,8), -- 手续费率IN v_Margin decimal(20,8), -- 每手占用保证金IN v_MarginRate decimal(20,8), -- 保证金率IN v_AccountTypeID int(11), -- 账号类型IDIN v_HyPlace varchar(20) -- 地址)BEGINDECLARE v_ContractID bigint(20); -- 合约IDDECLARE v_SecurityTypeID int(11); -- 证券类型IDDECLARE v_VarietyID int(11); -- 种类IDDECLARE v_CreateDate date; -- 创建日期SELECT VarietyID,SecurityTypeID INTO v_VarietyID,v_SecurityTypeID FROM contractvariety WHERE ExchangeID=v_ExchangeID AND VarietyName=v_ContractName;SET v_ContractID=CONCAT(SecurityTypeID,(v_SymbolNum+0));SET v_CreateDate=DATE_SUB(v_ExpireDate,INTERVAL 1 YEAR);INSERT INTO contractinfo VALUES( v_ContractID, v_SymbolNum, v_ContractName, v_SecurityTypeID, v_ExchangeID, v_VarietyID, v_MaxMarketOrderVolume, v_MMarketOrderVolume, v_MaxLimitOrderVolume, v_MLimitOrderVolume, v_StartDeliveryDate, v_EndDeliveryDate, v_CreateDate, v_OpenDate, v_ExpireDate, v_VolumeMultiple, v_PriceTick, v_IsTradg, v_IsAvailable, v_Price, v_PriceUnit, v_Unit, v_CurrencyID, v_CommissionFee, v_CommissionRate, v_Marg, v_MargRate, v_AccountTypeID, v_HyPlace); END;
CALL spInscontractinfo( 'SB1303', -- v_SymbolNum varchar(20), -- 合约号 '白糖', -- v_ContractName varchar(24), -- 合约名称 2072007, -- v_ExchangeID int(11), -- 交易所ID 30, -- v_MaxMarketOrderVolume int(11), -- 市价单最大下单量 1, -- v_MinMarketOrderVolume int(11), -- 市价单最小下单量 200, -- v_MaxLimitOrderVolume int(11), -- 限价单最大下单量 1, -- v_MinLimitOrderVolume int(11), -- 限价单最小下单量 '2013-03-01', -- v_StartDeliveryDate date, -- 开始交割日期 '2013-03-17', -- v_EndDeliveryDate date, -- 结束交割日期 NULL, -- v_OpenDate date, -- 上市日期 '2013-03-17', -- v_ExpireDate date, -- 过期日期 112000, -- v_VolumeMultiple int(11), -- 合约数量乘数 0.01, -- v_PriceTick decimal(20,8), -- 最小变动价格 0, -- v_IsTrading tinyint(1), -- 当前是否交易 1, -- v_IsAvailable tinyint(1), -- 合约是否有效 26.88, -- v_Price decimal(20,8), -- 价格 '美分/磅', -- v_PriceUnit varchar(20), -- 单位/价格 112000, -- v_Unit varchar(20), -- 单位/手(每手最小单位) '150003', -- v_CurrencyID int(11), -- 货币单位ID 0, -- v_CommissionFee decimal(20,8), -- 手续费 0.0002, -- v_CommissionRate decimal(20,8), -- 手续费率 NULL, -- v_Margin decimal(20,8), -- 每手占用保证金 0.1, -- v_MarginRate decimal(20,8), -- 保证金率 105020004, -- v_AccountTypeID int(11), -- 账号类型ID '天志期货交易中心' -- v_HyPlace varchar(20) -- 地址);
SELECT VarietyID,SecurityTypeID INTO v_VarietyID,v_SecurityTypeID FROM contractvariety WHERE ExchangeID=v_ExchangeID AND VarietyName=v_ContractName;
检查是否没有满足条件的记录
[解决办法]
SELECT VarietyID,SecurityTypeID FROM contractvariety
试一下,应该是你的这个表中根本没有这个字段。
[解决办法]
SELECT VarietyID,SecurityTypeID INTO v_VarietyID,v_SecurityTypeID FROM contractvariety
SecurityTypeID 这个列名写错了吗