读书人

看看这mysql语句错在哪里啊该如何处理

发布时间: 2012-04-09 13:41:24 作者: rapoo

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

SQL code
DECLARE v_ContractID    bigint(20); -- 合约IDDECLARE v_SymbolNum    varchar(20); -- 合约号DECLARE v_ContractName    varchar(24); -- 合约名称DECLARE v_SecurityTypeID    int(11); -- 证券类型IDDECLARE v_ExchangeID    int(11); -- 交易所IDDECLARE v_VarietyID    int(11); -- 种类IDDECLARE 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); -- 货币单位IDDECLARE 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); -- 账号类型IDDECLARE v_HyPlace    varchar(20); -- 地址DECLARE v_VarietyName VARCHAR(20);BEGINSET 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_ContractIDbigint(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_ContractIDbigint(20)' at line 1

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

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

读书人网 >Mysql

热点推荐