Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Stored Procedures] Nie działają, choć składnia jest poprawna.
Forum PHP.pl > Forum > Bazy danych > MySQL
f1x
Witam,

napisałem w MySQL taka procedurę składową i wrzuciłem ją za pomocą skryptu SPEditor Version 0.91 BETA:

Kod
           CREATE PROCEDURE eMU_CreateCharacter(OUT aResult SMALLINT, OUT aCharactersCount SMALLINT, IN sAccountID VARCHAR(10), IN sName VARCHAR(10), IN aClass SMALLINT)
           BEGIN
               DECLARE aCount        SMALLINT;
               DECLARE aStrength    SMALLINT;
               DECLARE aDexterity    SMALLINT;
               DECLARE aVitality    SMALLINT;
               DECLARE aEnergy        SMALLINT;
               DECLARE aLeadership    SMALLINT;
               DECLARE aMapNumber    SMALLINT;
               DECLARE aMapPosX    SMALLINT;
               DECLARE aMapPosY    SMALLINT;
          
               SELECT COUNT(*) INTO @aCount FROM `character` WHERE Name = @sName;
          
               IF(@aCount = 0)
               THEN
                   SELECT COUNT(*) INTO @aCharactersCount FROM `character` WHERE AccountID = @sAccountID;
          
                   SET @aLeadership    = 0;
                   SET @aMapNumber        = 0;
                   SET @aMapPosX        = 182;
                   SET @aMapPosY        = 128;
          
                   IF(@aClass = 0)
                   THEN
                       SET @aStrength         = 18;
                       SET @aDexterity     = 18;
                       SET @aVitality         = 15;
                       SET @aEnergy         = 30;
                   END IF;
          
                   IF(@aClass = 16)
                   THEN
                       SET @aStrength         = 28;
                       SET @aDexterity     = 20;
                       SET @aVitality         = 25;
                       SET @aEnergy         = 10;
                   END IF;
          
                   IF(@aClass = 32)
                   THEN
                       SET @aStrength         = 22;
                       SET @aDexterity     = 25;
                       SET @aVitality        = 20;
                       SET @aEnergy         = 15;
                       SET @aMapNumber     = 3;
                       SET @aMapPosX        = 182;
                       SET @aMapPosY        = 128;
                   END IF;
          
                   IF(@aClass = 48)
                   THEN
                       SET @aStrength        = 26;
                       SET @aDexterity     = 26;
                       SET @aVitality         = 26;
                       SET @aEnergy         = 26;
                   END IF;
          
                   IF(@aClass = 64)
                   THEN
                       SET @aStrength         = 26;
                       SET @aDexterity     = 20;
                       SET @aVitality        = 20;
                       SET @aEnergy         = 15;
                       SET @aLeadership    = 15;
                   END IF;
          
                   IF(@aClass = 80)
                   THEN
                       SET @aStrength        = 18;
                       SET @aDexterity     = 18;
                       SET @aVitality         = 15;
                       SET @aEnergy         = 30;
                   END IF;
          
                   INSERT INTO `character` (`AccountID`, `Name`, `Class`, `Strength`, `Dexterity`, `Vitality`, `Energy`, `Leadership`, `MapNumber`, `MapPosX`, `MapPosY`) VALUES(@sAccountID, @sName, @aClass, @aStrength, @aDexterity, @aVitality, @aEnergy, @aLeadership, @aMapNumber, @aMapPosX, @aMapPosY);
          
                   SET @aResult = 1;
               END IF;
          
               IF(@aCount = 0)
               THEN
                   SET @aResult        = 0;
                   SET @aCharactersCount    = 0;
               END IF;
           END;


Procedura wrzuciła się bez problemu, ale pojawiają się problemy z jej używaniem. Otóż po uruchomieniu procedury poleceniem
Kod
         CALL eMU_CreateCharacter(@aResult, @aCharactersCount, 'thrall', 'thrall12', '0');

SELECT @aResult;
SELECT @aCharactersCount;


wyrzucany jest błąd

Cytat
#1048 - Column 'AccountID' cannot be null


Natomiast po zakomentowaniu linii z INSERT, błąd przy callowaniu SPEditor Version 0.91 BETA jest:

Cytat
Error retrieving temp variable in call.


a w PHPMyAdmin zapytanie zwraca NULL ;/.

Powiedziec szczerze musze, ze z tych Stored procedures probuje korzystac dopiero od jakies 3 godzin, ale znacznie ulatwi mi to prace i nie chce z nich rezygnowac. Jesli chodzi o jezyki programowania, to znam biegle C++ i Assemblera, takze ogolnie poczatkujacym nie jestem.

Korzystam z AppServer 2.5.10, a zawiera on:

Apache Web Server Version 2.2.8

PHP Script Language Version 5.2.6

MySQL Database Version 5.0.51b.

Z gory dziekuje za pomoc,
Pozdrawiam!
osiris
Pomieszales typy zmiennych. W procedurze zadeklarowales sobie zmienne lokalne (bez @ przed nazwa), a potem uzywasz zmiennych sesyjnych (z @ przed nazwa).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.