交易流程

问题描述 投票:0回答:0

请修复我的 Sybase Anywhere SQL 过程。该程序使用一个事务来更新一个球员的薪水,然后用一个事务检查这个球员的薪水增加后球队所有球员的支出是否不超过500,000。 'WydatkiDruzyny()' 是一个内置函数,用于计算球队在球员工资上的总支出。

ALTER PROCEDURE "DBA"."SalaryCap"(@pesel CHAR(11), @poPodwyzce INTEGER,@klucz INTEGER) AS
BEGIN
    DECLARE @przedPodwyzka INTEGER
    DECLARE @wydatkiKlubu INTEGER
    DECLARE @salary INTEGER 
    SET @salary=500000

    SELECT
        @wydatkiKlubu = WydatkiKlubu(klucz)
    FROM
        Druzyna
        INNER JOIN Zawodnik ON Druzyna.IdD = Zawodnik.IdD
    WHERE
        Zawodnik.PESEL = @pesel
    
    SET @przedPodwyzka = (SELECT Zarobki FROM Zawodnik WHERE PESEL = @pesel)

    DECLARE @pom INTEGER
    SET @po m = ( @poPodwyzce - @przedPodwyzka )

    BEGIN TRANSACTION transakcja
    
    UPDATE
        Zawodnik
    SET
        Zarobki = @poPodwyzce
    WHERE
        PESEL = @pesel
    
    IF ( @wydatkiKlubu + @pom ) > @salary
    BEGIN 
        ROLLBACK TRANSACTION transakcja
        RETURN 
    END
    ELSE 
        COMMIT TRANSACTION transakcja
    END

问题是即使开销超过50万,更新还是执行了

sql sybase
© www.soinside.com 2019 - 2024. All rights reserved.