Получить OUT Paramater в MySQL

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

Изображение 174551

Я хочу получить OUT ID параметра, но когда я выполню эту процедуру, я получил сообщение об ошибке "Subquery возвращает более 1 строки", можете ли вы сказать мне свою ошибку? Благодарю вас

Теги:

1 ответ

0
Лучший ответ

Ваш подзапрос здесь неправильный:

     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 учетных записей нет такой же электронной почты

  • 0
    Я пытался, но все еще ошибка, «Подзапрос возвращает более 1 строки» Я загрузил изображение ошибки
  • 0
    Вы уверены, что UserEmail уникален для каждой строки. Если нет, то, безусловно, вы можете получить несколько идентификаторов пользователей для электронной почты ..
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню