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

看看这mysql语句错在哪里啊
我想通过变量赋值,然后调用存储过程传递参数,但是老是报错:
SQL code

DECLARE v_ContractID    bigint(20); -- 合约ID
DECLARE v_SymbolNum    varchar(20); -- 合约号
DECLARE v_ContractName    varchar(24); -- 合约名称
DECLARE v_SecurityTypeID    int(11); -- 证券类型ID
DECLARE v_ExchangeID    int(11); -- 交易所ID
DECLARE v_VarietyID    int(11); -- 种类ID
DECLARE v_MaxMarketOrderVolume    int(11); -- 市价单最大下单量
DECLARE v_MinMarketOrderVolume    int(11); -- 市价单最小下单量
DECLARE v_MaxLimitOrderVolume    int(11); -- 限价单最大下单量
DECLARE v_MinLimitOrderVolume    int(11); -- 限价单最小下单量
DECLARE v_StartDeliveryDate    date; -- 开始交割日期
DECLARE v_EndDeliveryDate    date; -- 结束交割日期
DECLARE v_CreateDate    date; -- 创建日期
DECLARE v_OpenDate    date; -- 上市日期
DECLARE v_ExpireDate    date; -- 过期日期
DECLARE v_VolumeMultiple    int(11); -- 合约数量乘数
DECLARE v_PriceTick    decimal(20,8);-- 最小变动价格
DECLARE v_IsTrading    tinyint(1); -- 当前是否交易
DECLARE v_IsAvailable    tinyint(1); -- 合约是否有效
DECLARE v_Price    decimal(20,8); -- 价格
DECLARE v_PriceUnit    varchar(20); -- 单位/价格
DECLARE v_Unit    varchar(20); -- 单位/手(每手最小单位)
DECLARE v_CurrencyID    int(11); -- 货币单位ID
DECLARE v_CommissionFee    decimal(20,8); -- 手续费
DECLARE v_CommissionRate    decimal(20,8); -- 手续费率
DECLARE v_Margin    decimal(20,8); -- 每手占用保证金
DECLARE v_MarginRate    decimal(20,8); -- 保证金率
DECLARE v_AccountTypeID    int(11); -- 账号类型ID
DECLARE v_HyPlace    varchar(20); -- 地址
DECLARE v_VarietyName VARCHAR(20);
BEGIN
SET v_ExchangeID='10502004';
SET v_VarietyName='白糖';
SELECT VarietyID,SecurityTypeID INTO v_VarietyID,v_SecurityTypeID FROM contractvariety WHERE ExchangeID=v_ExchangeID,VarietyName=v_VarietyName;
SET v_SymbolNum='SB1303'
SELECT CONCAT(v_SecurityTypeID,'1303') INTO v_ContractID;
SET v_ContractName=v_VarietyName;
SET v_MaxMarketOrderVolume=30;
SET v_MinMarketOrderVolume=1;
SET v_MaxLimitOrderVolume=200;
SET v_MinLimitOrderVolume=1;
SET v_StartDeliveryDate='2013-03-01';
SET v_EndDeliveryDate='2013-03-16';
SET v_CreateDate=NOW();
SET v_OpenDate='';
SET v_ExpireDate='2013-03-17';
SET v_VolumeMultiple='112000';
SET v_PriceTick='0.01';
SET v_IsTrading='0';
SET v_IsAvailable='1';
SET v_Price='26.88';
SET v_PriceUnit='美分/磅';
SET v_Unit=112000;
SET v_CommissionFee='0';
SET v_CommissionRate=0.0002;
SET v_Margin='';
SET v_MarginRate=0.1;
SET v_AccountTypeID=105020004;
SET v_HyPlace='天志期货交易中心';
CALL spInscontractinfo
(v_ContractID
 v_SymbolNum
 v_ContractName
 v_SecurityTypeID
 v_ExchangeID
 v_VarietyID
 v_MaxMarketOrderVolume
 v_MinMarketOrderVolume
 v_MaxLimitOrderVolume
 v_MinLimitOrderVolume
 v_StartDeliveryDate
 v_EndDeliveryDate
 v_CreateDate
 v_OpenDate
 v_ExpireDate
 v_VolumeMultiple
 v_PriceTick
 v_IsTrading
 v_IsAvailable
 v_Price
 v_PriceUnit
 v_Unit
 v_CurrencyID
 v_CommissionFee
 v_CommissionRate
 v_Margin
 v_MarginRate
 v_AccountTypeID
 v_HyPlace
);

END;



错误提示:
[SQL] DECLARE v_ContractID bigint(20);
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE v_ContractID bigint(20)' at line 1

到底错在哪里哦?高手请指点。

------解决方案--------------------
MYSQL 不可以这样,
这些语句必须写在存储过程中,这和ORACLE,MS SQL SERVER不一样。不支持匿名块。