mysql - 最后一行接近尾部时出错

标签 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

最佳答案

尝试用这个我更新了一些更改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;

关于mysql - 最后一行接近尾部时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21822010/

相关文章:

php - 根据单击的按钮更新表时的情况语句?

mysql - 如何使用 mysqlimport 累积结果

Mysql:向创建表语句添加触发器

mysql - db.Database.SqlQuery 原始数据返回存储过程名称和参数

sql - 具有输入和输出参数的存储过程

mysql - 在 sql 中给定字母顺序时查找上一个/下一个记录?

mysql - 将 'x.frm' 重命名为 'y.frm' 时出错 - 错误代码 : 13 - Permission denied - MySQL

sql - 如何返回 SQL Server 存储过程的计算(聚合)结果

ms-access - 如何在MS Access中制作存储过程?

mysql - Mysql存储过程出现错误 "Operand should contain 1 column(s)"