最后一行接近结束时出错

时间:2014-02-17 06:13:16

标签: mysql stored-procedures

当我执行存储过程时,我不知道为什么在最后一行显示错误... 我找不到任何错误

错误在于

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 '' at
line 60

_

CREATE PROCEDURE `PartyBalanceViewByLedgerId`

    (
    p_ledgerId varchar(50),
    p_crOrDr varchar(50),
    p_branchId varchar(50)
    )

BEGIN

IF (p_crOrDr='Dr')
THEN
    SELECT 
    TEMP.voucherNo +'_'+ TEMP.voucherType AS ID,
    TEMP.voucherType,
    CASE WHEN (TEMP.voucherType = 'Receipt Voucher')
    THEN
        (SELECT receiptMasterId FROM tbl_ReceiptMaster 
            WHERE (receiptMasterId = TEMP.voucherNo))
    ELSE
        (SELECT purchaseMasterId FROM tbl_PurchaseMaster
         WHERE (purchaseMasterId = TEMP.voucherNo)) 
    END AS voucherNo,
    CAST(CAST(TEMP.balance AS DECIMAL(24,2)) AS char(27)) 
    AS amount
    FROM(SELECT 
        A.voucherNo,
        A.voucherType,
        (SUM(ifnull(A.credit, 0)) - SUM(ifnull(A.debit, 0)))
         AS balance 
        FROM tbl_PartyBalance AS A 
        WHERE (A.voucherType = 'Purchase Invoice' 
            OR A.voucherType = 'Receipt Voucher') 
        AND A.ledgerId=p_ledgerId 
        AND A.branchId=p_branchId 
        AND A.optional='False'
        GROUP BY A.voucherNo,A.voucherType
    )AS TEMP  
    WHERE TEMP.Balance>0 ;
ELSE 
        SELECT 
            TEMP.voucherNo +'_'+ TEMP.voucherType ID,
            TEMP.voucherType,
            CASE WHEN TEMP.voucherType = 'Payment Voucher' THEN 
            (SELECT paymentMasterId FROM tbl_PaymentMaster WHERE (paymentMasterId = TEMP.voucherNo))
             ELSE
            (SELECT salesInvoiceNo FROM tbl_SalesMaster WHERE (salesMasterId = TEMP.voucherNo)) END AS voucherNo,
            CAST(CAST(TEMP.balance AS DECIMAL(24,2))AS char(27)) AS amount
            FROM(
                SELECT 
                A.voucherNo,
                A.voucherType,  
                (SUM(ifnull(A.debit, 0)) - SUM(ifnull(A.credit,0))) AS balance           

                FROM tbl_PartyBalance AS A 
                WHERE (A.voucherType = 'Sales Invoice' OR A.voucherType = 'Payment Voucher'OR A.voucherType = 'Job Invoice') AND A.ledgerId=p_ledgerId AND A.branchId=p_branchId AND A.optional='False'
                GROUP BY A.voucherNo,A.voucherType
                )AS TEMP  
        WHERE TEMP.Balance > 0 ;
END

3 个答案:

答案 0 :(得分:1)

尝试使用此功能,我已更新了一些更改END IF;

CREATE PROCEDURE `PartyBalanceViewByLedgerId`

    (
    p_ledgerId varchar(50),
    p_crOrDr varchar(50),
    p_branchId varchar(50)
    )

BEGIN

IF (p_crOrDr='Dr')
    SELECT 
    TEMP.voucherNo +'_'+ TEMP.voucherType AS ID,
    TEMP.voucherType,
    CASE WHEN (TEMP.voucherType = 'Receipt Voucher')
    THEN
        (SELECT receiptMasterId FROM tbl_ReceiptMaster 
            WHERE (receiptMasterId = TEMP.voucherNo))
    ELSE
        (SELECT purchaseMasterId FROM tbl_PurchaseMaster
         WHERE (purchaseMasterId = TEMP.voucherNo)) 
    END AS voucherNo,
    CAST(CAST(TEMP.balance AS DECIMAL(24,2)) AS char(27)) 
    AS amount
    FROM(SELECT 
        A.voucherNo,
        A.voucherType,
        (SUM(ifnull(A.credit, 0)) - SUM(ifnull(A.debit, 0)))
         AS balance 
        FROM tbl_PartyBalance AS A 
        WHERE (A.voucherType = 'Purchase Invoice' 
            OR A.voucherType = 'Receipt Voucher') 
        AND A.ledgerId=p_ledgerId 
        AND A.branchId=p_branchId 
        AND A.optional='False'
        GROUP BY A.voucherNo,A.voucherType
    )AS TEMP  
    WHERE TEMP.Balance>0;

ELSE 
        SELECT 
            TEMP.voucherNo +'_'+ TEMP.voucherType ID,
            TEMP.voucherType,
            CASE WHEN TEMP.voucherType = 'Payment Voucher' THEN 
            (SELECT paymentMasterId FROM tbl_PaymentMaster WHERE (paymentMasterId = TEMP.voucherNo))
             ELSE
            (SELECT salesInvoiceNo FROM tbl_SalesMaster WHERE (salesMasterId = TEMP.voucherNo)) END AS voucherNo,
            CAST(CAST(TEMP.balance AS DECIMAL(24,2))AS char(27)) AS amount
            FROM(
                SELECT 
                A.voucherNo,
                A.voucherType,  
                (SUM(ifnull(A.debit, 0)) - SUM(ifnull(A.credit,0))) AS balance           

                FROM tbl_PartyBalance AS A 
                WHERE (A.voucherType = 'Sales Invoice' OR A.voucherType = 'Payment Voucher'OR A.voucherType = 'Job Invoice') AND A.ledgerId=p_ledgerId AND A.branchId=p_branchId AND A.optional='False'
                GROUP BY A.voucherNo,A.voucherType
                )AS TEMP  
        WHERE TEMP.Balance > 0 ;
END IF;
END;

答案 1 :(得分:0)

您使用的是DELIMITER吗?如果不是pl,请阅读此描述:

Delimiters in MySQL

我希望这能解决你的问题。

答案 2 :(得分:0)

在ELSE中删除分号:

GROUP BY A.voucherNo,A.voucherType
)AS TEMP  
WHERE TEMP.Balance>0 
ELSE 
    SELECT 
        TEMP.voucherNo +'_'+ TEMP.voucherType ID,
        TEMP.voucherType,