MySQL,函数返回NULL值

时间:2017-09-07 13:37:32

标签: mysql

我尝试创建一个函数,它应该返回具有最高伤害值的法术的id。我有两种类型的伤害处理法术,每步造成伤害的伤害和一步造成伤害的伤害。这是我的代码:

DELIMITER //

CREATE FUNCTION `getSpellMaxDmgID`(`pCharID` int(11))
RETURNS int(11)
DETERMINISTIC
BEGIN

DECLARE pdmgpts int(11) DEFAULT 0;
DECLARE pdmgprstp int(11) DEFAULT 0;
DECLARE pdmgmaxspellid int(11) DEFAULT 0;

IF (SELECT MAX(`damage_points`) FROM `spell` WHERE `spell`.`spell_id` IN( SELECT `spell_id` FROM `character_spell` WHERE `character_spell`.`character_id`=pCharID)) IS NOT NULL THEN
SET pdmgpts=(SELECT MAX(`damage_points`) FROM `spell` WHERE `spell`.`spell_id` IN( SELECT `spell_id` FROM `character_spell` WHERE `character_spell`.`character_id`=pCharID));
END IF;
IF (SELECT MAX(`damage_per_step`) FROM `spell` WHERE `spell`.`spell_id` IN( SELECT `spell_id` FROM `character_spell` WHERE `character_spell`.`character_id`=pCharID)) IS NOT NULL THEN
SET pdmgprstp=(SELECT MAX(`damage_per_step`) FROM `spell` WHERE `spell`.`spell_id` IN( SELECT `spell_id` FROM `character_spell` WHERE `character_spell`.`character_id`=pCharID));
END IF;
IF pdmgpts>=pdmgprstp THEN
SET pdmgmaxspellid=(SELECT `spell_id` FROM `spell` WHERE `spell`.`damage_points`=pdmgpts AND `spell`.`spell_id` IN ( SELECT `spell_id` FROM `character_spell` WHERE `character_spell`.`character_id`=pCharID) LIMIT 1);
ELSE
SET pdmgmaxspellid=(SELECT `spell_id` FROM `spell` WHERE `spell`.`damage_per_step`=pdmgpts AND `spell`.`spell_id` IN ( SELECT `spell_id` FROM `character_spell` WHERE `character_spell`.`character_id`=pCharID) LIMIT 1);
END IF;

RETURN pdmgmaxspellid;

END; //
DELIMITER ;

当我尝试像这个SELECT getSpellMaxDmgID(8)一样调用函数时,该函数返回NULL值,即使它应该返回一个整数值,使得具有该角色ID的角色在其法术列表中具有法术。谁能在这里看到这个问题?提前谢谢!

这是表结构:

CREATE TABLE `spell` (
`spell_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`spell_type_id` int(11) UNSIGNED NOT NULL,
`name` varchar(30) NOT NULL,
`magicka_cost` int(11) NOT NULL,
`damage_per_step` int(11) DEFAULT NULL,
`damage_points` int(11) DEFAULT NULL,
`fortify_points` int(11) DEFAULT NULL,
PRIMARY KEY (`spell_id`),
CONSTRAINT `fk_spell_spell_type_id` FOREIGN KEY (`spell_type_id`) REFERENCES `spell_type`(`spell_type_id`) ON DELETE CASCADE ON UPDATE CASCADE);

还有一些数据:

INSERT INTO spell (spell_type_id, name, magicka_cost, damage_per_step) VALUES (2, 'Summon Dremora', 84, 30); INSERT INTO spell (spell_type_id, name, magicka_cost, damage_per_step) VALUES (2, 'Summon Flame Atronach', 69, 25); INSERT INTO spell (spell_type_id, name, magicka_cost, damage_points) VALUES (3, 'Fire Damage', 10, 30); INSERT INTO spell (spell_type_id, name, magicka_cost, damage_points) VALUES (3, 'Frost Damage', 10, 30); INSERT INTO spell (spell_type_id, name, magicka_cost, fortify_points) VALUES (2, 'Bound Boots', 6, 10); INSERT INTO spell (spell_type_id, name, magicka_cost, fortify_points) VALUES (2, 'Bound Cuirass', 6, 10);

拼写类型:

CREATE TABLE `spell_type` (
`spell_type_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`spell_type_id`));

INSERT INTO spell_type (名称) VALUES ('Alteration'); INSERT INTO spell_type (名称) VALUES ('Conjuration'); INSERT INTO spell_type (名称) VALUES ('Destruction'); INSERT INTO spell_type (名称) VALUES ('Illusion'); INSERT INTO {spell_type {1}} {名称{1}} {spell_type {1}} {名称{1}}

角色拼写:

( character_spell ) VALUES ('Mysticism'); INSERT INTO character_spell_id ( character_id ) VALUES ('Restoration'); spell_id CREATE TABLE character_spell_id ( uk_character_id_spell_id int(11) UNSIGNED NOT NULL AUTO_INCREMENT, character_id int(11) UNSIGNED NOT NULL, spell_id int(11) UNSIGNED NOT NULL, PRIMARY KEY ( fk_character_spell_character_id ), CONSTRAINT character_id UNIQUE (字符, character_id ), CONSTRAINT fk_character_spell_spell_id FOREIGN KEY ( spell_id ) REFERENCES咒语( spell_id { {1}}

) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT character_spell FOREIGN KEY ( character_id ) REFERENCES spell_id ( character_id ) ON DELETE CASCADE ON UPDATE CASCADE ); character_spell INSERT INTO character_id ( spell_id , character_id ) VALUES( character_spell , 10); INSERT INTO character_id ( spell_id , character_id ) VALUES( character_spell , 14); INSERT INTO character_id ( spell_id , character_id { {1}} character_spell ) VALUES( character_id , 18); INSERT INTO spell_id ( character_id , character_spell ) VALUES( character_id , 28); INSERT INTO spell_id ( character_id {{1 }}

字符:

,字符) VALUES( character_id , 55); INSERT INTO的user_id (名称,性别) VALUES( XP , 87);CREATE TABLE( {character_id {1}} {uk_character_id_user_id {1}} {character_id {1}} {USER_ID {1}}

int(11) UNSIGNED NOT NULL AUTO_INCREMENT, 字符int(11) UNSIGNED NOT NULL, 的user_id varchar(30) NOT NULL, 名称varchar(10) NOT NULL, 性别bigint NOT NULL, XP bigint NOT NULL, bigint NOT NULL, PRIMARY KEY (), CONSTRAINT 7 UNIQUE ( {Mashiela {1}} {女{1}}

0 个答案:

没有答案