DELIMITER //
CREATE PROCEDURE InsertUser
(
IN RoleID INT,
IN UserEmail VARCHAR(100),
IN UserPassword VARCHAR(250),
OUT ID INT
)
BEGIN
INSERT INTO useraccount
(
RoleID,
UserEmail,
UserPassword,
CreateDate
)
VALUES
(
RoleID,
UserEmail,
UserPassword,
CURRENT_TIMESTAMP
);
SET ID = (SELECT UserID FROM useraccount WHERE UserEmail = UserEmail);
END //
DELIMITER ;
Я хочу получить OUT ID
параметра, но когда я выполню эту процедуру, я получил сообщение об ошибке "Subquery возвращает более 1 строки", можете ли вы сказать мне свою ошибку? Благодарю вас
Ваш подзапрос здесь неправильный:
SELECT UserID FROM useraccount WHERE UserEmail = UserEmail
Здесь вы сравниваете UserEmail с самим собой, что будет верно для каждой строки в таблице с не нулевыми значениями.
Я бы предложил, чтобы лучший подход заключался в изменении имени вашего параметра UserEmail IN (скажем, по электронной почте):
DELIMITER //
CREATE PROCEDURE InsertUser
(
IN RoleID INT,
IN email VARCHAR(100),
IN UserPassword VARCHAR(250),
OUT ID INT
)
BEGIN
INSERT INTO useraccount
(
RoleID,
UserEmail,
UserPassword,
CreateDate
)
VALUES
(
RoleID,
email ,
UserPassword,
CURRENT_TIMESTAMP
);
SET ID = (SELECT UserID FROM useraccount WHERE UserEmail = email);
END //
DELIMITER ;
Пожалуйста, попробуйте это. Надеюсь, вы убедитесь, что у 2 учетных записей нет такой же электронной почты