0

While i Execute a stored procedure I don't know why showing error in last line... I can't find any error with it

The error is telling

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
Nisar
  • 5,708
  • 17
  • 68
  • 83

3 Answers3

1

try with this i have update some changes END IF and ; etc

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;
Satish Sharma
  • 9,547
  • 6
  • 29
  • 51
0

Are you using a DELIMITER? If not pl go through this description:

Delimiters in MySQL

I hope this will solve your problem.

Community
  • 1
  • 1
Neels
  • 2,547
  • 6
  • 33
  • 40
0

Remove the semicolon before ELSE in :

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