2016-03-30 4 views
0

В моей Mysql, я написал ниже хранимую процедуру для вставки данных в таблицу пользователей,MySQL сохраненная процедура выдачи параметров

DELIMITER $$

DROP PROCEDURE IF EXISTS `CreateUser1`$$ 
CREATE PROCEDURE `CreateUser1`(
    IN Email VARCHAR(50), 
    IN Password1 VARCHAR(50), 
    IN FirstName VARCHAR(50), 
    IN LastName VARCHAR(50), 
    IN AlternateEmail VARCHAR(50), 
    IN PhoneNumber VARCHAR(50), 
    IN Token VARCHAR(500) 
) 

BEGIN 

    IF NOT EXISTS(SELECT user_id FROM `um.user` WHERE `email`=Email)THEN 
     INSERT INTO `um.user`(site_id,email,PASSWORD,alternate_email,first_name,last_name,contact_number, 
        created_on,updated_on,is_active,token,is_verified_email) 
     VALUES 
     (1, Email1 , Password1 ,AlternateEmail, FirstName , LastName ,PhoneNumber,UTC_TIMESTAMP(),UTC_TIMESTAMP(),1,Token,0); 
    END IF; 
END$$ 
DELIMITER ; 

Когда я проверить эту процедуру, как показано ниже,

CALL `CreateUser1`('[email protected]' , 'abcdefgh' ,'[email protected]', 'sa' , '' ,'123456789','hasghsdfhgfhgfhdgfhdsgsh'); 

SELECT * FROM `um.user` WHERE email='[email protected]'; 

Он ничего не делает.

Он не вставляет данные в таблицу, я выяснил проблему.

Исследуется в параметре «Электронная почта».

Но когда я изменяю параметр «Электронная почта» на «Email12», он работал, как ожидалось.

Но я не хочу, чтобы изменить в параметре, как это будет изменение в моей API, а также,

Теперь я хочу, чтобы решить эту проблему в уровне зр, а я пытался ниже изменений, а также в СП, который также не работает,

Set @userEmail=Email; 
IF NOT EXISTS(SELECT user_id FROM `um.user` WHERE `email`[email protected])THEN 

Любые предложения

с уважением Sangeetha

+0

Не должна ли она быть вызвана с: ВЫЗОВ 'CreateUser1' ('[email protected] ' 'ABCDEFGH', 'са',' ',' abc @ gmail.com ',' 123456789 ',' hasghsdfhgfhgfhdgfhdsgsh '); (AlternateEmail после LastName не до FirstName) – piotrgajow

+0

Оба правильные. – Sangeetha

+0

В MySQL имя параметра, переданное в хранимую процедуру, не должно совпадать с именем столбца. Я давно получил эту проблему и выяснил, что это причина. –

ответ

0

Попробуйте это, если вы хотите, чтобы справиться с йо ур проблема внутри самой хранимой процедуры, не меняя имя параметра,

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `CreateUser1`$$ 
CREATE PROCEDURE `CreateUser1`(
    IN Email VARCHAR(50), 
    IN Password1 VARCHAR(50), 
    IN FirstName VARCHAR(50), 
    IN LastName VARCHAR(50), 
    IN AlternateEmail VARCHAR(50), 
    IN PhoneNumber VARCHAR(50), 
    IN Token VARCHAR(500) 
) 

BEGIN 
    DECLARE Email1 VARCHAR(50); 
    SET Email1 = Email; 
    IF NOT EXISTS(SELECT user_id FROM `um.user` WHERE `email`=Email1)THEN 
     INSERT INTO `um.user`(site_id,email,PASSWORD,alternate_email,first_name,last_name,contact_number, 
        created_on,updated_on,is_active,token,is_verified_email) 
     VALUES 
     (1, Email1 , Password1 ,AlternateEmail, FirstName , LastName ,PhoneNumber,UTC_TIMESTAMP(),UTC_TIMESTAMP(),1,Token,0); 
    END IF; 
END$$ 
DELIMITER ; 

Это происходит потому, что в MySQL, имя параметра передается хранимой процедуры не должны быть такими же, как Column Name. Надеюсь, это решает вашу проблему :)