【问题标题】:syntax error in MYSQL '1064'MYSQL '1064' 中的语法错误
【发布时间】:2025-12-11 11:00:01
【问题描述】:

我无法找出以下查询的语法错误。帮助?帮助 ?帮忙?

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):您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便在 'DECLA 附近使用正确的语法 RE p_prefix VARCHAR(50); 声明 p_startIndex int ; 在第 8 行声明 p_suffix VARHA'

【问题讨论】:

  • 我认为您需要 ELSEIF 中的空间。像这样ELSE IF
  • ELSE IF 在 mssql 而不是 mysql 。 mysql有ELSEIF
  • 为什么给我-2 .. ;(

标签: php mysql sql stored-procedures


【解决方案1】:

尝试将DECLARE statements 放在BEGIN 之后:

DECLARE 只允许在 BEGIN ... END 复合语句中使用,并且必须位于其开头,在任何其他语句之前。

【讨论】:

  • @Gumbo 实际上这是 OPs 基本问题的正确答案(+1)。我给出的答案不在图片中,除非 OP 将声明语句放在 if 循环之外。
【解决方案2】:

COUNT(suffixPrefixId)FROM 分隔为 COUNT(suffixPrefixId) FROM

【讨论】:

    【解决方案3】:

    尝试从if 语句中删除分号:

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

    【讨论】:

      最近更新 更多