Возможно ли, что мы можем вызвать процедуру из какой-то другой процедуры и вызвать процедуру sub sub в цикле? - PullRequest
0 голосов
/ 08 июля 2019

Я создаю процедуру, которая вызывает другую процедуру в цикле. У другой процедуры также есть некоторые условия, которые определяют, является ли вызов подпрограммы в цикле или нет. У меня проблема с подпроцедурой не вызывая в цикле. Но основная процедура отлично работает в цикле.

Основная процедура

CREATE PROCEDURE `sale_batch`(IN invno INT)
BEGIN
    /* Varibales */
    declare itemcode int;
    declare inv_no int;
    declare sdate datetime;
    declare itemrate double;
    declare qty double;
    declare c_code double;
    declare finished integer default 0;

    /* Result set */
    DECLARE sale_inv CURSOR FOR  SELECT  salesdtl.itemcode,sales.inv_no,sales.date,salesdtl.itemrate,salesdtl.totalno,sales.customers_code  FROM sales Join salesdtl on (sales.inv_no=salesdtl.inv_no) WHERE sales.inv_no=invno;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
    OPEN sale_inv;
    get_records: LOOP
        FETCH sale_inv INTO itemcode,inv_no,sdate,itemrate,qty,c_code;
        IF finished = 1 THEN
            CLOSE sale_inv;
            LEAVE get_records;
        ELSE
            CALL sale_batch_h(itemcode,qty,inv_no,sdate,itemrate,c_code);
        END IF;
    END LOOP;
END

Подпроцедура

CREATE `sale_batch_h`(in stockcode INT,in qty double,in invno int,in sdate datetime,in itemrate double,in c_code int)
BEGIN
    /* Varibales */
    declare grn_no int;
    declare prate double;
    declare balqty double;
    declare sold double;
    declare newsold double;
    declare finished integer default 0;

    /* Result set */
    DECLARE sale_inv_h CURSOR FOR  SELECT pinvoiceno,itemrate,(itemqty-soldqty) as balqty,soldqty FROM stockbatch WHERE itemcode=stockcode and (itemqty-soldqty)>0 ORDER BY date LIMIT 0,1;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
    OPEN sale_inv_h;
    FETCH sale_inv_h INTO grn_no,prate,balqty,sold;
        IF finished = 1 THEN
            CLOSE sale_inv_h;
        ELSE
            IF balqty >= qty THEN
                INSERT INTO stockbatch_details (pinvoiceno,sinvoiceno,sdate,sqty,srate,ccode,prate,itemcode) values (grn_no,invno,sdate,qty,itemrate,c_code,prate,stockcode);
                SET newsold = sold+qty;
                UPDATE stockbatch SET SoldQty=newsold where pinvoiceno=grn_no;
                INSERT INTO `logs`(command) values ('Single');
            ELSE
                SET newsold = sold+balqty;
                INSERT INTO stockbatch_details (pinvoiceno,sinvoiceno,sdate,sqty,srate,ccode,prate,itemcode) values (grn_no,invno,sdate,qty,itemrate,c_code,prate,stockcode);
                UPDATE stockbatch SET SoldQty=newsold where pinvoiceno=grn_no;
                SET qty = qty-balqty;
                INSERT INTO `logs`(command) values ('Mutliple Calls');
                CALL sale_batch_h(stockcode,qty,invno,sdate,itemrate,c_code);
            END IF;
        END IF;
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...