我想做的是:
-
如果存在,请删除该过程
-
创建过程
-
-
在过程内部,准备insert语句
-
在过程内部,执行语句
-
在过程内部,取消分配该过程
// optionally drop the sproc and create the create user SPROC
con.query(`USE ${config.database.name}`, function(err, result) {
if (err) {
con.rollback(function() {
throw err;
});
}
});
con.query(`DROP PROCEDURE IF EXISTS ${config.database.name}.sproc_create_user`, function(err, result) {
if (err) {
con.rollback(function() {
throw err;
});
}
});
con.query(`
CREATE PROCEDURE sproc_create_user (
paramEmail VARCHAR(64),
paramPassword VARCHAR(64)
)
BEGIN
SET @generatedSalt = (SELECT LEFT(SHA(RAND()), 8));
SET @sql = 'INSERT INTO User (
Email,
PasswordHash,
PasswordSalt
) VALUES (
?,
?,
?
);'
PREPARE createUserStatement FROM @sql;
EXECUTE createUserStatement USING @paramEmail, SHA(CONCAT(@generatedSalt, @paramPassword)), @generatedSalt;
DEALLOCATE PREPARE createUserStatement;
END;`, function(err, result) {
if (err) {
con.rollback(function() {
throw err;
});
}
});
当我尝试执行此代码时,会出现以下SQL异常:
您的SQL语法有错误;检查手册
对应于要使用的正确语法的MariaDB服务器版本
我试着浏览文档,但是存储过程的信息很简单(至少可以说),并且没有关于PREPARE…EXECUTE…DEALLOCATE的信息。