mysql - SQL 过程中用于创建用户和授予权限的语法错误
问题描述
有人能指出我为什么会出现语法错误吗?每当我尝试将它输入到控制台时,我都会收到“expre2”的语法错误,我没有得到它,因为它似乎很好:
DELIMITER $$
DROP PROCEDURE IF EXISTS `add_User`$$
CREATE PROCEDURE `add_User`(IN `p_Name` VARCHAR(45), IN `p_Passw` VARCHAR(200), IN NIF INT(12))
BEGIN
DECLARE `_HOST` CHAR(14) DEFAULT '@\'localhost\'';
SET `p_Name` := CONCAT('\'', REPLACE(TRIM(`p_Name`), CHAR(39), CONCAT(CHAR(92), CHAR(39))), '\''),
`p_Passw` := CONCAT('\'', REPLACE(`p_Passw`, CHAR(39), CONCAT(CHAR(92), CHAR(39))), '\'');
SET @`sql` := CONCAT('CREATE USER ', `p_Name`, `_HOST`, ' IDENTIFIED BY ', `p_Passw`);
PREPARE `stmt` FROM @`sql`;
EXECUTE `stmt`;
DEALLOCATE PREPARE `stmt`;
FLUSH PRIVILEGES;
SET @`expre` := CONCAT('GRANT SELECT, INSERT, UPDATE ON trabalho.ver_assist TO ', `p_Name`);
PREPARE `stmt2` FROM @`expre`;
EXECUTE `stmt2`;
DEALLOCATE `stmt2`;
SET @`expre2` := CONCAT('GRANT SELECT, INSERT, UPDATE ON trabalho.ver_saidas TO ', `p_Name`);
PREPARE `stmt3` FROM @`expre2`;
EXECUTE `stmt3`;
DEALLOCATE `stmt3`;
FLUSH PRIVILEGES;
END$$
我真的不明白为什么它不起作用......
解决方案
您的设置语句不正确,您必须选择例如 SET @sql := (select CONCAT('CREATE USER ', p_Name
, _HOST
, ' IDENTIFIED BY ', p_Passw
));
并且您的 2 个 deallocate 不正确,语法是 deallocate prepare something
那里有很多不必要的反引号。
推荐阅读
- google-maps - 选择一个随机的 Google 地图图钉
- apache-flink - Java 客户端连接本地 Flink 集群失败
- spring-boot - 未能在 30000 的超时时间内关闭 1 个相位值为 x 的 bean:
- css - 我可以让animation-timing-function影响整个动画而不是动画的每一步吗?
- css - Capybara Rails Rspec _ 查找 css 属性/值
- javascript - 在显示新数据之前清除
- php - 分别向所有人发送电子邮件
- xml - 如何在 Magento 中找到要编辑的正确文件
- node.js - Nodejs中resizeToMaxAsync的任何替代函数
- javascript - 根据对象的关键结构生成元素