Błąd przy instrukcji warunkowej w transkacji

0

Hej, może mi ktoś wyjaśnić co jest nie tak z kodem? Silnik zwraca błąd składni przy instrukcji warunkowej:

START TRANSACTION;

SET AUTOCOMMIT=0;

SET @IdProduktu = (SELECT NumerProduktu FROM Produkty WHERE NazwaProduktu = 'Rower górski Trek 9000');
SET @StanMagazynowy = (SELECT StanMagazynowy FROM Produkty WHERE NumerProduktu = @IdProduktu);

IF @StanMagazynowy >= 2 THEN
    SET @MaxIdNrZamowienia = (SELECT MAX(NumerZamowienia) FROM Zamowienia);
    SET @IdKlienta = (SELECT IDKlienta FROM Klienci WHERE ImieKlienta = 'Suzanne' AND NazwiskoKlienta = 'Viescas');
    SET @IdPracownika = (SELECT IDPracownika FROM Pracownicy WHERE ImiePracownika = 'Ann' AND NazwiskoPracownika = 'Patterson');
    SET @CenaZakupu = (SELECT CenaDetaliczna FROM Produkty WHERE NumerProduktu = @IdProduktu);

    -- Dodaj zamówienie
    INSERT INTO Zamowienia (NumerZamowienia, DataZamowienia, DataWysylki, IDKlienta, IDPracownika)
    VALUES (@MaxIdNrZamowienia + 1, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 DAY), @IdKlienta, @IdPracownika);

    -- Dodaj szczegóły zamówienia
    INSERT INTO Dane_zamowien (NumerZamowienia, NumerProduktu, CenaZakupu, ZamowionaIlosc)
    VALUES (@MaxIdNrZamowienia + 1, @IdProduktu, @CenaZakupu, 2);

    -- Aktualizuj stan magazynowy produktu
    UPDATE Produkty SET StanMagazynowy = @StanMagazynowy - 2 
    WHERE NumerProduktu = @IdProduktu;

ELSE
    SET @Info = 'Brak wystarczającej ilości towaru';
    SELECT @Info;
END IF;

COMMIT;
0

Ja mam wszędzie case w repo, pewnie nie bez powodu:). Spróbuj przepisać

0

Jeżeli masz kilka linii to użyj begin end

0

Próbowałem tak, ale dalej jest błąd składni:

START TRANSACTION;

SET AUTOCOMMIT=0;

SET @IdProduktu = (SELECT NumerProduktu FROM Produkty WHERE NazwaProduktu = 'Rower górski Trek 9000');
SET @StanMagazynowy = (SELECT StanMagazynowy FROM Produkty WHERE NumerProduktu = @IdProduktu);

CASE
    WHEN @StanMagazynowy >= 2 THEN
        BEGIN
            SET @MaxIdNrZamowienia = (SELECT MAX(NumerZamowienia) FROM Zamowienia);
            SET @IdKlienta = (SELECT IDKlienta FROM Klienci WHERE ImieKlienta = 'Suzanne' AND NazwiskoKlienta = 'Viescas');
            SET @IdPracownika = (SELECT IDPracownika FROM Pracownicy WHERE ImiePracownika = 'Ann' AND NazwiskoPracownika = 'Patterson');
            SET @CenaZakupu = (SELECT CenaDetaliczna FROM Produkty WHERE NumerProduktu = @IdProduktu);

            -- Dodaj zamówienie
            INSERT INTO Zamowienia (NumerZamowienia, DataZamowienia, DataWysylki, IDKlienta, IDPracownika)
            VALUES (@MaxIdNrZamowienia + 1, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 DAY), @IdKlienta, @IdPracownika);

            -- Dodaj szczegóły zamówienia
            INSERT INTO Dane_zamowien (NumerZamowienia, NumerProduktu, CenaZakupu, ZamowionaIlosc)
            VALUES (@MaxIdNrZamowienia + 1, @IdProduktu, @CenaZakupu, 2);

            -- Aktualizuj stan magazynowy produktu
            UPDATE Produkty SET StanMagazynowy = @StanMagazynowy - 2 
            WHERE NumerProduktu = @IdProduktu;
        END;
    ELSE

END;

COMMIT;
0

Teraz doszedłem, że taki IF zadziała w procedurze, jako samodzielny skrypt nie

1 użytkowników online, w tym zalogowanych: 0, gości: 1