且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

将 MS-SQL Server 存储过程转换为 MySQL 查询

更新时间:2023-02-22 18:21:25

我不得不自己写这个过程,这里是帮助我理解 MySQL 中的存储过程的链接:http://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/.以及我想出的程序

I had to write this procedure on my own, here is the link that helped me understand the Stored Procedures in MySQL: http://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/. And the procedure that I came up wit

DROP PROCEDURE IF EXISTS `Acc_Ledger`;

DELIMITER //

CREATE PROCEDURE `Acc_Ledger` ()
BEGIN
    DECLARE RunningTotal, deb, cred DECIMAL(19,2);
    DECLARE counter, row_count int;

    SET RunningTotal = 0;
    SET counter = 1;

    DROP TABLE IF EXISTS LedgerTbl;

    CREATE TEMPORARY TABLE LedgerTbl (CTR int primary key auto_increment, PARTY_ID INT,VRDATE VARCHAR(200),VRNOA VARCHAR(200),ETYPE VARCHAR(50),DESCRIPTION VARCHAR(500),DEBIT DECIMAL(19,2),CREDIT DECIMAL(19,2),RTotal DECIMAL(19,2));

    INSERT INTO LedgerTbl
    SELECT 0, PARTY_ID,VRDATE,DCNO,ETYPE,DESCRIPTION,DEBIT,CREDIT, null FROM PLEDGER WHERE PARTY_ID=17 AND VRDATE BETWEEN '2010/10/02' AND '2013/12/02' 
    ORDER BY VRDATE,ETYPE,DCNO;

    SELECT COUNT(*) INTO row_count FROM LedgerTbl;

    WHILE counter <= row_count DO

        SELECT debit INTO deb FROM LedgerTbl WHERE ctr = counter;
        SELECT credit INTO cred FROM LedgerTbl WHERE ctr = counter;
        SET RunningTotal = RunningTotal + (deb-cred);

        UPDATE LedgerTbl 
        SET LedgerTbl.RTotal = RunningTotal
        WHERE ctr = counter;  

        SET counter = counter + 1;

    END WHILE;

    SELECT * FROM LedgerTbl;
END//
DELIMITER ;

更新

现在我找到了相对有效的解决方案:

UPDATE

Now I found the comparatively efficient solution:

DROP PROCEDURE IF EXISTS `Acc_Ledger`;

DELIMITER //

CREATE PROCEDURE `Acc_Ledger` ()
BEGIN
    DECLARE RunningTotal, deb, cred DECIMAL(19,2);
    DECLARE counter, row_count int;

    SET RunningTotal = 0;
    SET counter = 1;

    DROP TABLE IF EXISTS LedgerTbl;

    CREATE TEMPORARY TABLE LedgerTbl (CTR int primary key auto_increment, PARTY_ID INT,VRDATE VARCHAR(200),VRNOA VARCHAR(200),ETYPE VARCHAR(50),DESCRIPTION VARCHAR(500),DEBIT DECIMAL(19,2),CREDIT DECIMAL(19,2),RTotal DECIMAL(19,2));

    INSERT INTO LedgerTbl
    SELECT 0, PARTY_ID,VRDATE,DCNO,ETYPE,DESCRIPTION,DEBIT,CREDIT, null FROM PLEDGER WHERE PARTY_ID=17 AND VRDATE BETWEEN '2010/10/02' AND '2013/12/02' 
    ORDER BY VRDATE,ETYPE,DCNO;

    SELECT COUNT(*) INTO row_count FROM LedgerTbl;

    SET @RunningTotal := 0;

    UPDATE LedgerTbl 
    SET RTotal = (@RunningTotal := @RunningTotal + (DEBIT - CREDIT));

    SELECT * FROM LedgerTbl;
END//
DELIMITER ;