簡體   English   中英

MySQL存儲過程IN參數問題

[英]MySQL Stored procedure IN parameter issue

在Mysql中,我編寫了以下存儲過程以將數據插入到用戶表中,

分隔符$$

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';

它什么也沒做。

它沒有將數據插入表中,我發現了這個問題。

問題在參數“電子郵件”中。

但是,當我將參數“ Email”更改為“ Email12”時,它按預期工作。

但是我不想更改參數,因為這也會改變我的API,

現在我也想在sp級別解決此問題,我也嘗試了以下SP的更改,但這些更改也不起作用,

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

有什么建議么

關於Sangeetha

您還可以限定其標識符。 請參閱9.2.1標識符限定符

...
               /*
               -- 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
...

如果您想在存儲過程本身中解決問題,而不更改參數名稱,請嘗試此操作,

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中,傳遞給存儲過程的參數名稱不應與列名稱相同。 希望這能解決您的問題:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM