mysql - 在非递归过程中超出递归限制

标签 mysql stored-procedures recursion mariadb

我有一个调用另一个过程的过程。他们从不互相回电话或给自己打电话,但我收到一个错误响应,表明他们是。程序如下:

CREATE PROCEDURE grantPermission (perm VARCHAR(30), target VARCHAR(30), id VARCHAR(8), host VARCHAR(45), passwd VARCHAR(45))
  BEGIN 
    SET @setPermissionCmd = CONCAT('GRANT ', perm, ' ON ', target, ' TO ''', id, '''@''', host, ''' IDENTIFIED BY ''', passwd, ''';');
    PREPARE setPermissionStmt FROM @setPermissionCmd;
    EXECUTE setPermissionStmt;
    DEALLOCATE PREPARE setPermissionStmt;
    FLUSH PRIVILEGES;
  END

CREATE PROCEDURE grantAdmin (id VARCHAR(8), host VARCHAR(45), passwd VARCHAR(45))
  BEGIN
    CALL grantPermission('EXECUTE', 'PROCEDURE createUser', id, host, passwd);
    CALL grantPermission('EXECUTE', 'PROCEDURE grantAdmin', id, host, passwd);
    CALL grantPermission('EXECUTE', 'PROCEDURE revokeAdmin', id, host, passwd);
    CALL grantPermission('INSERT,UPDATE', 'TaskType', id, host, passwd);
    CALL grantPermission('UPDATE', 'User', id, host, passwd);
    UPDATE User SET isAdmin=1 WHERE dbUser=id;
    FLUSH PRIVILEGES;
  END

当我调用第二个过程时,我得到以下响应:

MariaDB [pattsdb]> CALL grantAdmin('patts', '%', 'patts');
ERROR 1456 (HY000): Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine grantAdmin

为什么它认为我的程序是递归的?仅仅因为定义文本中提到了名称?

最佳答案

将此添加到存储过程的开头:

SET max_sp_recursion_depth=255;

关于mysql - 在非递归过程中超出递归限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29111791/

相关文章:

PHP 使用选择值来搜索并将结果显示到文本框

php - SELECT JOIN 在同一表中多行

mysql - 循环遍历多个循环

arrays - 将数组中的项目替换为不同集合中的元素

java - 用递归算法打包一组盒子

mysql - SQL 语法错误 - INSERT 中的 SELECT 语句

mysql - 有关 Select 语句的 SQL 问题

mysql - 如何在 MySQL 中声明一个具有一个输入变量的存储过程?

sql - DROP PROCEDURE 抛出语法错误

java - Java中如何检测List是否包含自身