首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

MYSQL中为什么调用这个存储过程老是报错啊解决方法

2012-04-11 
MYSQL中为什么调用这个存储过程老是报错啊我的MYSQL版本是5.5.21,写了个插入数据的存储过程,但是在调用的

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), -- 交易所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;

这个存储过程能正常创建,但是调用的时候就报错:
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在存储过程里已经赋值了啊。。郁闷啊,高手请解答。


[解决办法]
contractvariety表是否 有SecurityTypeID字段,分步调试,看看哪个语句出问题





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 这个列名写错了吗

热点排行