2013-12-17 140 views
-1

我无法弄清下列查询语法错误。帮助?帮帮我 ?帮帮我 ?语法错误在MYSQL'1064'

CREATE PROCEDURE VoucherNumberGenerationForClass(
p_voucherType varchar(50), 
p_yearId varchar(50), 
p_NO longtext) 
begin 
IF((SELECT COUNT(suffixPrefixId)FROM tbl_SuffixPrefix WHERE (yearId = p_yearId) AND (voucherType = p_voucherType))<>0) 
    then 
     DECLARE p_prefix VARCHAR(50); 
     DECLARE p_startIndex int ; 
     DECLARE p_suffix VARCHAR(50) ; 
     DECLARE p_voucherNo VARCHAR(50) ; 
     DECLARE p_prefix1 VARCHAR(50) ; 
     DECLARE p_suffix1 VARCHAR(50) ; 
      IF (((SELECT COUNT(suffixPrefixId)FROM tbl_SuffixPrefix WHERE (yearId = p_yearId) AND (voucherType = p_voucherType)))<>0); 
        then 
         SET p_prefix=(SELECT ifnull(prefix,'') FROM tbl_SuffixPrefix WHERE (yearId = p_yearId) AND (voucherType = p_voucherType)); 
         SET p_suffix=(SELECT ifnull(suffix,'') FROM tbl_SuffixPrefix WHERE (yearId = p_yearId) AND (voucherType = p_voucherType)); 

         SET p_startIndex=(SELECT startIndex FROM tbl_SuffixPrefix WHERE (yearId = p_yearId) AND (voucherType = p_voucherType)); 
         SET p_startIndex=p_startIndex-1; 

          IF p_voucherType='Sales Invoice' 
           then SET p_voucherNo=(SELECT ifnull(MAX(voucherNo+1),1) FROM tbl_SalesMaster WHERE((suffixPrefixId = (SELECT suffixPrefixId FROM tbl_SuffixPrefix WHERE (yearId = p_yearId) AND (voucherType = p_voucherType))) 
           )) 
          END if ; 
         SET p_voucherNo=p_voucherNo+p_startIndex ; 
         SET p_voucherNo= p_prefix+ p_voucherNo+p_suffix ; 
         SELECT p_voucherNo ; 
      END if; 
ELSEIF 
    IF p_voucherType='Sales Invoice' 
     then SET p_voucherNo=(SELECT ifnull(MAX(voucherNo+1), 1) FROM tbl_SalesMaster) ; 
    SELECT p_voucherNo ; 
END IF ; 
end ; 
 
ERROR 1064 (42000): 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 'DECLA 
RE p_prefix VARCHAR(50); 
DECLARE p_startIndex int ; 
DECLARE p_suffix VARCHA' at line 8
+0

我想你需要'ELSEIF'中的空间。像这样'ELSE IF' – Nithesh

+0

ELSE IF在mssql而不是mysql中。 mysql has ELSEIF – Nisar

+0

为什么geven我-2;( – Nisar

回答

1

独立COUNT(suffixPrefixId)FROMCOUNT(suffixPrefixId)FROM

+0

谢谢,但我再次在第8行有一个错误 – Nisar

1

尝试从以下if语句删除分号:

IF (((SELECT COUNT(suffixPrefixId)FROM tbl_SuffixPrefix WHERE (yearId = p_yearId) AND (voucherType = p_voucherType)))<>0); 
+0

谢谢,但我再次在第8行有一个错误 – Nisar

3

尝试把你的DECLARE statements权之后BEGIN

DECLARE仅在BEGIN ... END复合语句中被允许,并且必须在任何其他语句之前开始。

+0

谢谢,但我又有一个错误26行 - – Nisar

+0

...所以你在别的地方有另一个语法错误 – Gumbo

+0

@Gumbo其实这是OPs基本问题(+1)的正确答案。我给出的答案不在图片中,除非OP在循环之外放置声明语句。 – Bhushan