我的MYSQL版本是5.5.21,写了个插入数据的存储过程,但是在调用的时候老报错,这个存储过程代码: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;这个存储过程能正常创建,但是调用的时候就报错: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在存储过程里已经赋值了啊。。郁闷啊,高手请解答。

解决方案 »

  1.   

    contractvariety表是否 有SecurityTypeID字段,分步调试,看看哪个语句出问题SELECT VarietyID,SecurityTypeID INTO v_VarietyID,v_SecurityTypeID FROM contractvariety WHERE ExchangeID=v_ExchangeID AND VarietyName=v_ContractName;
    检查是否没有满足条件的记录
      

  2.   

    我试了下,这个查询复制语句有数据显示的:SELECT VarietyID,SecurityTypeID FROM contractvariety WHERE ExchangeID=2072007 AND VarietyName='白糖';
    +-----------+----------------+
    | VarietyID | SecurityTypeID |
    +-----------+----------------+
    |     20701 |              8 |
    +-----------+----------------+
    1 row in set (0.02 sec)
      

  3.   

    SELECT VarietyID,SecurityTypeID FROM contractvariety试一下,应该是你的这个表中根本没有这个字段。
      

  4.   

    有哦,我查询了的:SELECT VarietyID,SecurityTypeID FROM contractvariety WHERE ExchangeID=2072007 AND VarietyName='白糖';
    +-----------+----------------+
    | VarietyID | SecurityTypeID |
    +-----------+----------------+
    |     20701 |              8 |
    +-----------+----------------+
    1 row in set (0.02 sec)
      

  5.   

    SET v_ContractID=CONCAT(v_SecurityTypeID,(v_SymbolNum+0));
      

  6.   

    SELECT VarietyID,SecurityTypeID INTO v_VarietyID,v_SecurityTypeID FROM contractvarietySecurityTypeID 这个列名写错了吗
      

  7.   

    没有啊,我还查询了的SELECT VarietyID,SecurityTypeID FROM contractvariety WHERE ExchangeID=2072007 AND VarietyName='白糖';
    +-----------+----------------+
    | VarietyID | SecurityTypeID |
    +-----------+----------------+
    |     20701 |              8 |
    +-----------+----------------+
    1 row in set (0.02 sec)
      

  8.   

    仔细看看
    你的代码
    SET v_ContractID=CONCAT(SecurityTypeID,(v_SymbolNum+0));
    SecurityTypeID是变量、字段?
      

  9.   

    SET v_ContractID=CONCAT(SecurityTypeID,(v_SymbolNum+0));
    这句改成SET v_ContractID=CONCAT(v_SecurityTypeID,(v_SymbolNum+0));
      

  10.   

    额,发现了应该是变量。但是,我改了之后又报错了:
    [Err] 1292 - Truncated incorrect DOUBLE value: 'SB1303'
    看看这又是什么错误啊??
      

  11.   

    改了之后,又报错了:
    [Err] 1292 - Truncated incorrect DOUBLE value: 'SB1303'
    这个又是哪里错了啊?
      

  12.   

    检查v_SecurityTypeID、v_SymbolNum中是什么值
      

  13.   


    mysql> SELECT VarietyID,SecurityTypeID FROM contractvariety where ExchangeID=207
    2007  AND VarietyName='白糖';
    +-----------+----------------+
    | VarietyID | SecurityTypeID |
    +-----------+----------------+
    |     20701 |              8 |
    +-----------+----------------+
    1 row in set (0.02 sec)
    v_SecurityTypeID是8,v_SymbolNum是SB1303
      

  14.   

    先确定是哪句出问题,SELECT 变量名
      

  15.   

    SET v_ContractID=CONCAT(SecurityTypeID,(v_SymbolNum+0));
    不知道这句是不是写的对的。但是我改成
    SELECT CONCAT(SecurityTypeID,(v_SymbolNum+0)) INTO v_ContractID;
    还是报同样的错。
      

  16.   

    给出你的create table 语句, insert into 语句,这样别人可以直接用你的代码进行调试分析错误。省得这样猜来猜去。
      

  17.   

    我也碰到这样的问题了,百度了下说是mysql的bug。
    本来想到csdn搜下,看看有没有人搞定了这问题的,看来问了也没用。