简体   繁体   English

插入后MySQL存储过程SELECT VAR错误值

[英]MySQL Stored procedure SELECT var wrong value after INSERT

I have a problem on MySQL stored procedure, already did another logic with IF THEN ELSE, but I still have problems which I cant understand... 我在MySQL存储过程上有问题,已经用IF THEN ELSE做了另一个逻辑,但是我仍然有我无法理解的问题...

The procedure consists on two user inputs: user_id and meet_id . 该过程由两个用户输入组成: user_idmet_id The procedure define a variable called 'ue' which stores result of a bunch of validation ( if user exists, if event exists, if event date is still valid, etc. ). 该过程定义了一个名为“ ue”的变量,该变量存储一堆验证的结果( 如果存在用户,事件存在,事件日期仍然有效等 )。

After that, it does INSERT and UPDATE some data on multiple tables in IF THEN ELSE selector, and SELECT 1 (or 0) AS result depending of validation. 之后,它将在IF THEN ELSE选择器中的多个表上执行INSERT和UPDATE,并根据验证选择SELECT 1(或0)AS结果。

But my problem is: it always return me 0 as 'result', as if my validation variable was 0 when I do INSERT... And there is where things get weird, if I remove the INSERT [...]; 但是我的问题是:执行INSERT时,它总是返回0作为“结果”,就好像我的验证变量是0 ...如果删除了INSERT [...],事情就会变得很奇怪。 line of the code, it returns me the value of validation correctly (1 or 0). 代码行,它会正确返回验证值(1或0)。

The code of the procedure is this one: 程序的代码是这样的:

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

Thanks in advance! 提前致谢! I have been stuck on this for a while now, and can not figure out why. 我已经坚持了一段时间了,不知道为什么。

You should define OUT parameter. 您应该定义OUT参数。 Add

", OUT result INT" “,OUT结果INT”

immediately after the last IN parameter. 在最后一个IN参数之后。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM