在尝试创建此过程以哈希密码时,我一直收到语法错误。不确定为什么会说语法错误。
我一直遇到的错误是:
您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获取在'@pFirstName varchar(255)附近使用的正确语法, @pLastName varchar(255), @pEmail varchar(255), @'在第2行
CREATE PROCEDURE `Users`
@pFirstName varchar(255),
@pLastName varchar(255),
@pEmail varchar(255),
@pPassword NVARCHAR(50),
@pType int(11),
@pCreatedAt datetime,
@pUpdatedAt datetime,
@pUser_type enum('admin','project-manager','lawyer','anonymous-client','client','external-client','intake-bot'),
@pUndashPassword NVARCHAR(50),
@responseMessage NVARCHAR(250) OUTPUT
AS
BEGIN
SET NOCOUNT ON
BEGIN TRY
insert into `Users` (`firstName`,`lastName`,`email`, `password`,`type`,`createdAt`,`updatedAt`,`user_type`, `PasswordHash`)
VALUES(@pFirstName, @pLastName, @pEmail, @pPassword, @pType, @pCreatedAt, @pUpdatedAt, @pUser_type, HASHBYTES('SHA2_512', @pUndashPassword))
SET @responseMessage='Success'
END TRY
BEGIN CATCH
SET @responseMessage=ERROR_MESSAGE()
END CATCH
END
答案 0 :(得分:1)
在MySQL中声明在SP中使用的变量时,您将需要采用以下方式:
STORE PROCEDURE someThing(in Var1 INT, in Var2 VARCHAR(20)....)
我的意思是你需要:
input
值,一个outpu
值还是两个inputouput
现在这些是您SP的参数,但是如果您在SP内需要变量,那么正确的正弦值为:
DECLARE anotherValue INT DEFAULT 10;
我的意思是您将需要:
DECLARE
声明DEFAULT
值检查此示例
DELIMITER //
CREATE PROCEDURE EXAMPLE1(IN idUser INT)
BEGIN
DECLARE Total INT;
SELECT COUNT(*)
INTO Total
FROM users
WHERE users.id = idUser;
SELECT Total;
END //
DELIMITER ;
以这种方式调用后:
CALL EXAMPLE1(1);
答案 1 :(得分:0)
您似乎已经习惯了Microsoft SQL Server语法。
MySQL与Microsoft SQL Server是不同的SQL实现。 MySQL具有自己的语法,这是不同的。我注意到您的示例中有很多事情在MySQL中不起作用。我尚未测试您的程序是否完整,因此,请仅将其视为错误的示例。
MySQL不使用@
标记来表示过程参数或局部变量。查看我对Mysql stored procedure gives unknown column error when executed
TRY
/ CATCH
是Microsoft语法。 MySQL不使用它,它使用一种语法来声明错误状态的“处理程序”:https://dev.mysql.com/doc/refman/8.0/en/declare-handler.html
SET NOCOUNT ON
也是Microsoft语法。 MySQL没有任何等效功能。
SHA_512()
在MySQL中不是函数。您应该使用SHA2(<string>, 512)
。参见https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_sha2
您应该阅读一些有关存储过程语法的MySQL文档。
该手册仅供参考。所有语法都有文档记录,但它不是面向任务的文档,因此仅从手册中学习MySQL存储过程就很困难。
还有一本O'Reilly的书,它现在已经有点老了,但无疑仍然很有帮助,因为MySQL存储过程的功能没有太大变化:MySQL Stored Procedure Programming 。