MySQL存储过程IN参数问题

时间:2016-03-30 08:49:23

标签: mysql stored-procedures

在我的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`('ab1@ansys.com' , 'abcdefgh' ,'abc@gmail.com',  'sa' , '' ,'123456789','hasghsdfhgfhgfhdgfhdsgsh');

SELECT * FROM `um.user` WHERE email='ab1@ansys.com';

它什么都不做。

它没有将数据插入表中,我发现了问题。

isssue在参数" Email"中。

但是当我更改参数" Email"到" Email12" ,它按预期工作。

但我不想更改参数,因为它也会改变我的API,

现在我想在sp级别解决这个问题,我在SP中尝试了以下更改也没有用,

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

任何建议

此致 桑杰塔

2 个答案:

答案 0 :(得分:1)

您也可以限定其标识符。请参阅9.2.1 Identifier Qualifiers

...
               /*
               -- You can also use Alias    
               SELECT `user_id`
               FROM `um.user` `uu`
               WHERE `uu`.`email` = `Email`
               */
IF NOT EXISTS (SELECT `user_id`
               FROM `um.user`
               WHERE `um.user`.`email` = `Email`) THEN
...

答案 1 :(得分: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中,传递给存储过程的参数名称不应与列名相同。希望这能解决你的问题:)