Ошибка процедуры SQL: неизвестный тип данных.(возле "(" в позиции 211) - PullRequest
0 голосов
/ 03 февраля 2019

Я пытался создать эту процедуру в MySQL, но она всегда выдает ту же ошибку

CREATE PROCEDURE registrarCuenta(@username, @password, @salt, @email)
BEGIN
    INSERT INTO (`Usuarios` `username`, `password`, `salt`, `email`) VALUES (@username, @password, @salt, @email)
    SET @code := lpad(conv(floor (rand()*pow(36,10)), 10, 36), 10, 0)
    WHILE(EXISTS(SELECT * FROM `Activaciones` WHERE `code` = @code))
    BEGIN
        SET @code := lpad(conv(floor(rand()*pow(36,10)), 10, 36), 10, 0)
    END
    BEGIN
        INSERT INTO `Activaciones` (`code`) VALUES (@code)
    END
END
GO;

1 Ответ

0 голосов
/ 03 февраля 2019

Поскольку вы используете команду GO, я предполагаю, что вы хотите реализовать процедуру в TSQL.Вот некоторые ошибки в вашем коде:

CREATE PROCEDURE registrarCuenta
(
@username NVARCHAR(255), 
@password NVARCHAR(255), 
@salt NVARCHAR(255), 
@email NVARCHAR(100)
)
AS
BEGIN
    DECLARE code FLOAT(5,2); -- or whatever you like
    INSERT INTO `Usuarios` (`username`, `password`, `salt`, `email`) VALUES 
(@username, @password, @salt, @email);
    SET @code = lpad(conv(floor (rand()*pow(36,10)), 10, 36), 10, 0);
    WHILE(EXISTS(SELECT * FROM `Activaciones` WHERE `code` = @code)) -- not sure if this is correct
    BEGIN
        SET @code = lpad(conv(floor(rand()*pow(36,10)), 10, 36), 10, 0);
    END
    INSERT INTO `Activaciones` (`code`) VALUES (@code);
END
GO;

Или, если вы действительно хотите MySQL:

DELIMITER $$
CREATE PROCEDURE registrarCuenta
(
IN username VARCHAR(255), 
IN password VARCHAR(255), 
IN salt VARCHAR(255), 
IN email VARCHAR(100)
)
AS
BEGIN
    DECLARE code FLOAT(5,2); -- or whatever you like
    INSERT INTO `Usuarios` (`username`, `password`, `salt`, `email`) VALUES 
(@username, @password, @salt, @email);
    SET @code = lpad(conv(floor (rand()*pow(36,10)), 10, 36), 10, 0);
    WHILE(EXISTS(SELECT * FROM `Activaciones` WHERE `code` = @code)) DO -- not sure if this is correct
        SET @code = lpad(conv(floor(rand()*pow(36,10)), 10, 36), 10, 0);
    END WHILE;
    INSERT INTO `Activaciones` (`code`) VALUES (@code);
END$$
DELIMITER ;

Не стесняйтесь уточнить процесс, который вы пытаетесь реализовать, чтобы бытьпредоставляется дополнительная поддержка!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...