我正在尝试创建一个存储过程来重命名MySQL数据库中的用户:
CREATE DEFINER=`admin`@`%` PROCEDURE `renamedbuser`(
IN _oldname VARCHAR(200),
IN _newname VARCHAR(200)
)
BEGIN
IF (SELECT COUNT(User) FROM mysql.user WHERE User = _oldname) > 0 THEN
BEGIN
RENAME USER _oldname TO _newname;
END;
END IF;
END
运行此过程时,出现以下错误:
MySql.Data.MySqlClient.MySqlException (0x80004005): Operation RENAME USER failed for '_oldname'@'%'
在我看来,执行RENAME USER行时,它使用变量_oldname的 name 作为原始用户名,而不是变量包含的 value
如果我执行类似的操作
RENAME USER 'test' TO 'testing';
如果可以正常运行,请重命名'test'@'%'用户。
我打给RENAME USER的电话不正确吗?当从存储过程中调用该语句时,它是否不能以这种方式工作?有什么方法可以实现我想要的行为?
答案 0 :(得分:0)
在account names的文档中说:
如果用户名和主机名是合法的,则无需用引号引起来。
我想这要优先于存储过程变量。它还说:
使用反引号(`),单引号(')或双引号(“)将用户名和主机名引用为标识符或字符串。
您可以尝试使用反引号,例如:
RENAME USER `_oldname` TO `_newname`;