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;
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;
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!