【发布时间】:2020-04-27 09:52:13
【问题描述】:
我正在尝试在过程的游标中使用存储过程的输入参数。 如下调用过程会导致错误
-- -role- -table- -cond-
CALL grantRoleToUsersFromWhere('Student', 'studenten', true);
错误代码:1146。表 'uni4.utable' 不存在
这告诉我参数“userTable”未写入变量“uTable”或“uTable”根本未被游标语句识别为变量。
我尝试了不同的方法来存储/使用参数。例如直接使用它们或将它们存储在带有 SET 语句的变量中。但是,如果我尝试使用 SET uTable=userTable;在游标声明之前,MySQL WorkBench 不会接受过程声明。
我在这方面花了很多时间,但我认为我错过了一个重要而简单的部分 :-)
DROP PROCEDURE IF EXISTS grantRoleToUsersFromWhere;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE grantRoleToUsersFromWhere(IN grantRole VARCHAR(30), IN userTable VARCHAR(30), IN addCondition VARCHAR(50))
BEGIN
DECLARE workUser VARCHAR(30) default '';
DECLARE gRole VARCHAR(30) default grantRole;
DECLARE uTable VARCHAR(30) default userTable;
DECLARE aCond VARCHAR(50) default addCondition;
DECLARE cur1 CURSOR FOR SELECT Name FROM uTable WHERE aCond;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO workUser;
GRANT gRole TO workUser;
END LOOP;
CLOSE cur1;
END $$
DELIMITER ;
【问题讨论】:
-
这是语法错误、永远运行、崩溃还是无法授予?
-
创建过程完美无缺,但调用它会导致“找不到表”错误
标签: mysql stored-procedures cursor parameter-passing mysql-8.0