我在MySQL存储过程中遇到问题,已经使用IF THEN ELSE做了另一个逻辑,但我仍然遇到了一些我无法理解的问题......
该过程包含两个用户输入: user_id 和 meet_id 。该过程定义了一个名为'ue'的变量,它存储了一堆验证的结果(如果用户存在,如果事件存在,如果事件日期仍然有效,等等。)
之后,它会在IF THEN ELSE选择器中对多个表执行INSERT和UPDATE,并根据验证对SELECT 1(或0)AS结果进行更新。
但是我的问题是:它总是将0作为'结果'返回0,好像我的INSERT时验证变量是0 ...而且如果我删除了INSERT,那么事情变得奇怪了... [...] ;代码行,它正确地返回验证值(1或0)。
程序的代码是这样的:
CREATE DEFINER=`nwouserf`@`localhost`
PROCEDURE `join_event`(IN `user_id` BIGINT(64), IN `event_id` INT)
NOT DETERMINISTIC MODIFIES SQL DATA SQL SECURITY DEFINER
begin
DECLARE ue INT;
SET ue = EXISTS(SELECT 1 FROM users WHERE fb_uid=user_id)
AND EXISTS(SELECT 1 FROM meetup WHERE meet_id=event_id)
AND EXISTS(SELECT 1 FROM meetup WHERE date > NOW() AND meet_id = event_id)
AND EXISTS(SELECT 1 FROM meetup WHERE meet_id = event_id AND participants <= max_participants)
AND NOT EXISTS(SELECT 1 FROM meetup_participation WHERE fb_uid = user_id AND meet_id = event_id);
IF ue = 1 THEN
INSERT INTO meetup_participation (fb_uid, meet_id) VALUES (user_id, event_id);
UPDATE users SET events_participated = events_participated + 1 WHERE fb_uid=user_id;
UPDATE meetup SET participants = participants + 1 WHERE meet_id=event_id;
SELECT 1 AS result;
ELSEIF ue = 0 THEN
SELECT 0 AS result;
ELSE
SELECT null AS result;
END IF;
end
提前致谢! 我现在已经坚持了一段时间,并且无法弄清楚原因。
答案 0 :(得分:1)
您应该定义OUT参数。添加
&#34;,OUT结果INT&#34;
紧接在最后一个IN参数之后。