日期:2014-05-16  浏览次数:20735 次

MYSQL中为什么调用这个存储过程老是报错啊
我的MYSQL版本是5.5.21,写了个插入数据的存储过程,但是在调用的时候老报错,这个存储过程代码:
SQL code

CREATE PROCEDURE spInscontractinfo
(
IN v_SymbolNum    varchar(20), -- 合约号
IN v_ContractName    varchar(24), -- 合约名称
IN v_ExchangeID    int(11), -- 交易所ID
IN 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), -- 货币单位ID
IN 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), -- 账号类型ID
IN v_HyPlace    varchar(20) -- 地址
)
BEGIN
DECLARE v_ContractID    bigint(20); -- 合约ID
DECLARE v_SecurityTypeID    int(11); -- 证券类型ID
DECLARE v_VarietyID    int(11); -- 种类ID
DECLARE 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;


这个存储过程能正常创建,但是调用的时候就报错:
SQL code

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) -- 地址
);


报错提示:
[Err] 1054 - Unknown column 'SecurityTypeID' in 'field list'

我这个SecurityTypeID在存储过程里已经赋值了啊。。郁闷啊,高手请解答。


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