Подзапрос процедуры MySQL возвращает ноль - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть процедура mysql, где я устанавливаю значения, используя подзапросы по мере их прохождения, и частично через подзапросы, все структурированные одинаково только с использованием разных параметров, начинающих возвращать ноль. Если я буквально скопирую и вставлю подзапрос в окно sql, он вернет результат.

Доход от услуг до сводки доходов работает просто отлично, но после «COGS to сводки доходов» «VALUE» продолжает возвращать NULL

DELIMITER $$
CREATE DEFINER=`shopf740`@`localhost` PROCEDURE `PeriodEnd`(IN `processdate` DATE)
    MODIFIES SQL DATA
BEGIN

    DECLARE GLID INT;
    DECLARE VALUE DECIMAL(11,2);
    DECLARE DESCRIPTION VARCHAR(150);
    DECLARE finished integer default 0;

    DECLARE MYCURS CURSOR FOR
    SELECT
        SUM(A.DEBIT) - SUM(A.CREDIT) VALUE,
        A.GLID,
        B.DESCRIPTION
    FROM
        GL_DETAIL A
    JOIN
        GL_HEADER B
    ON
        A.GLID = B.ACCOUNT
    WHERE
        B.CLASS IN ('EXPENSE')
    GROUP BY
        A.GLID,
        B.TYPE,
        B.DESCRIPTION
    HAVING
        SUM(A.DEBIT) - SUM(A.CREDIT) != 0;

    DECLARE CONTINUE HANDLER 
        FOR NOT FOUND SET finished = 1;  


    #* Service Revenue to Income Summary*
    SET VALUE = COALESCE((SELECT SUM(CREDIT) - SUM(DEBIT) AS `VALUE` FROM GL_DETAIL WHERE GLID = 301),0);
    IF 
        VALUE != 0
    THEN
        CALL JournalEntry(processdate,301,303,VALUE,CONCAT('Closing Service Revenue To Income Summary for period ending ',processdate),'CloseServRev');
    END IF;
    # * COGS to Income Summary *
    SET VALUE = COALESCE((SELECT SUM(DEBIT) - SUM(CREDIT) AS `VALUE` FROM GL_DETAIL WHERE GLID = 302),0);

    CALL JournalEntry(processdate,303,302,VALUE,CONCAT('Closing COGS With Income Summary for period ending ',processdate),'CloseCogs');


    #*Close Owner Drawings to Owner Capital*
    SET VALUE = COALESCE((SELECT SUM(DEBIT) - SUM(CREDIT) AS `VALUE` FROM GL_DETAIL WHERE GLID = 902),0);

    CALL JournalEntry(processdate,901,902,VALUE,CONCAT('Closing COGS With Income Summary for period ending ',processdate),'CloseOwnerDrawings');


    #*Close Income Summary to Owner Capital *
    SET VALUE = COALESCE((SELECT SUM(CREDIT) - SUM(DEBIT) AS `VALUE` FROM GL_DETAIL WHERE GLID = 303),0);

    CALL JournalEntry(processdate,303,901,VALUE,CONCAT('Closing Income Summary to Owner Capital for period ending ',processdate),'CloseIncomeToCapital');

    # *Close Expense accounts to Income Summary*
    OPEN MYCURS;

    my_loop: LOOP
        FETCH NEXT FROM MYCURS INTO
            VALUE,
            GLID,
            DESCRIPTION
            ;

        IF 
            finished = 1 THEN LEAVE my_loop;
        ELSE

            CALL JournalEntry(processdate,303,GLID,VALUE,CONCAT('Closing ',DESCRIPTION,' To Income Summary for period ending ',processdate),concat('CloseExpense',GLID));

        END IF;
    END LOOP;


END$$
DELIMITER ;
...