Błąd przy instrukcji warunkowej w transkacji

Błąd przy instrukcji warunkowej w transkacji
damian stelmach
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

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

Kopiuj
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;
lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5027
0

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

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
0

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

damian stelmach
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

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

Kopiuj
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;
PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.