Синтаксическая ошибка в SQL Процедура создания пользователей и предоставления разрешений - PullRequest
0 голосов
/ 09 октября 2018

Может кто-нибудь указать, почему я получаю синтаксическую ошибку?Всякий раз, когда я пытаюсь ввести его в консоль, я получаю синтаксическую ошибку для «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$$

Я действительно не вижупочему не работает ...

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Вы отсутствуют a PREPARE в DEALLOCATE stmt2 и DEALLOCATE stmt3.Ниже приведен исправленный запрос:

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 PREPARE `stmt2`;
    SET @`expre2` := CONCAT('GRANT SELECT, INSERT, UPDATE ON trabalho.ver_saidas TO ', `p_Name`);
PREPARE `stmt3` FROM @`expre2`;
EXECUTE `stmt3`;
DEALLOCATE PREPARE `stmt3`;
FLUSH PRIVILEGES;
END$$
0 голосов
/ 09 октября 2018

Ваши операторы set неверны, вы должны выбрать, например, SET @sql: = (выберите CONCAT ('CREATE USER', p_Name, _HOST, 'IDENTIFIED BY', p_Passw));

и 2 из вашего освобождения неверны, синтаксис отменен, приготовьте что-нибудь

И там очень много ненужных обратных галочек.

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