我的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在存储过程里已经赋值了啊。。郁闷啊,高手请解答。
(
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在存储过程里已经赋值了啊。。郁闷啊,高手请解答。
解决方案 »
- mysql存储过程对字符串处理的算法问题???
- 用rpm包把MySQL 5.1升级到5.5具体应该怎么做?
- 问一个关于mysql的问题:mysql_query 与 mysql_real_query的区别? 也就是什么时候用第一个,什么时候用第二个?
- MYSQL里有没创建目录的方法.?
- 请问,VB中如何向MYSQL数据库中插入图片呀..(BLOB数据类型),最好有代码,请高手看过来
- 如何输出不匹配gif,jpg,bmp等字符串的SQL
- 两个表的统计问题
- sql操作,添加记录时候可以不添加id(primary key) 让它自动增加呢 ?
- My SQL 可不可以進行類似MSSQL一樣的數據復制?
- 请问mysql如何做备份
- 求一个SQL 怎么写
- 日期查询问题
检查是否没有满足条件的记录
+-----------+----------------+
| VarietyID | SecurityTypeID |
+-----------+----------------+
| 20701 | 8 |
+-----------+----------------+
1 row in set (0.02 sec)
+-----------+----------------+
| VarietyID | SecurityTypeID |
+-----------+----------------+
| 20701 | 8 |
+-----------+----------------+
1 row in set (0.02 sec)
+-----------+----------------+
| VarietyID | SecurityTypeID |
+-----------+----------------+
| 20701 | 8 |
+-----------+----------------+
1 row in set (0.02 sec)
你的代码
SET v_ContractID=CONCAT(SecurityTypeID,(v_SymbolNum+0));
SecurityTypeID是变量、字段?
这句改成SET v_ContractID=CONCAT(v_SecurityTypeID,(v_SymbolNum+0));
[Err] 1292 - Truncated incorrect DOUBLE value: 'SB1303'
看看这又是什么错误啊??
[Err] 1292 - Truncated incorrect DOUBLE value: 'SB1303'
这个又是哪里错了啊?
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
不知道这句是不是写的对的。但是我改成
SELECT CONCAT(SecurityTypeID,(v_SymbolNum+0)) INTO v_ContractID;
还是报同样的错。
本来想到csdn搜下,看看有没有人搞定了这问题的,看来问了也没用。