-- FUNCTION check_asset_group_mirror_relationship
DROP FUNCTION IF EXISTS check_asset_group_mirror_relationship;
DELIMITER |
CREATE FUNCTION check_asset_group_mirror_relationship(group_id bigint(20)) RETURNS int
BEGIN
DECLARE group_type varchar(255);
DECLARE mirror_flag int default 0;
DECLARE parent_flag int default 0;
DECLARE parent_group_id bigint(20);
DECLARE done int default 0;
DECLARE parent_group_ids CURSOR FOR select agr.parent_asset_group_id from asset_group_relation agr where agr.child_asset_group_id = group_id;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
select asset_group_type into group_type from asset_group ag
where ag.id=group_id;
IF group_type = 'GROUP' THEN
SET group_type = 'ASSET_GROUP';
END IF;
select count(1) into mirror_flag from mirror_relationship mr
where mr.group_type = group_type and mr.group_id = group_id;
IF mirror_flag = 0 THEN
select count(1) into parent_flag from asset_group_relation agr
where agr.child_asset_group_id = group_id;
IF parent_flag > 0 THEN
OPEN parent_group_ids;
REPEAT
FETCH parent_group_ids INTO parent_group_id;
IF NOT done THEN
IF mirror_flag = 0 THEN
SET mirror_flag = check_asset_group_mirror_relationship(parent_group_id);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE parent_group_ids;
END IF;
END IF;
RETURN mirror_flag;
END|
DELIMITER ;
然后去调用check_asset_group_mirror_relationship(2),MySQL报Error 1424: Recursive stored functions and triggers are not allowed.
分享到:
相关推荐
本资源结合实例实现一个复杂的存储过程,存储过程中有用到游标、临时表、循环、递归等知识,sql文件附有实例数据表创建的sql语句。
包括两个存储过程,一个是建立临时表用来存储需要的数据,另一个利用临时表进行操作。
### MySQL存储过程与函数详解 #### 一、概述 MySQL是一种广泛使用的开源关系型数据库管理系统,在数据管理和存储方面提供了强大的支持。其中,存储过程和函数是MySQL提供的两种重要的编程特性,它们可以帮助开发者...
资源包中囊括了MySQL数据库中的存储过程的...该资源下所有内容都是本人的日常软件开发经验总结,对于初学者使用MySQL存储过程的程序员具有重要参考价值,问大家要10分是不过分的,用过就知道了,欢迎大家下载参考及使用
该方法是使用 MySQL 的存储过程来实现递归查询。首先,创建一个函数 `getChildLst`,该函数将返回一个由所有子节点号组成的字符串。该函数使用 WHILE 循环来递归地查找所有子节点,并使用 `FIND_IN_SET` 函数来判断...
通过编写存储过程或函数,我们可以定义一个递归逻辑来遍历层次结构。例如,如果我们有一个员工树结构,每个员工可能有下属,我们可以通过递归函数来获取整个组织结构。 ```sql CREATE FUNCTION get_subordinates...
### 两种MySQL递归Tree查询效率分析 #### 一、背景与目的 在数据库操作中,经常需要处理具有层级结构的数据。例如,在处理组织结构、文件系统或是地区划分时,通常会采用递归的方式来查询这些层级关系。MySQL作为...
在MySQL中,由于不直接支持递归查询,我们通常使用自连接或者存储过程来解决这个问题。这里,我们重点介绍使用存储过程的方法。存储过程可以接受参数,比如我们要获取的根节点ID,然后递归地查询所有子节点。 下面...
- 创建临时表存储递归结果。 - 使用`UNION ALL`结合`JOIN`操作实现递归。 - 示例略。 - **存储过程法**: - 创建存储过程,使用循环结构和条件判断来实现递归。 - 示例略。 **结论**: 虽然MySQL没有提供类似于...
### MySQL存储过程:数据库编程的高级艺术 #### 引言:存储过程的魔力 存储过程作为数据库领域中的一种高级特性,在提升数据处理效率及增强安全性方面扮演着至关重要的角色。MySQL作为广受青睐的关系型数据库管理...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预定义一系列SQL语句,并将它们封装成一个可重用的程序单元。这个PDF资料很可能是关于如何创建、使用和优化MySQL存储过程的教程,这对于数据库管理员和...
MySQL 中进行递归查询有两种常见的方式:一种是使用存储过程,另一种则是利用 SQL 函数来实现递归。 #### 二、通过存储过程实现递归查询 ##### 方法一:存储过程实现递归查询 **存储过程定义:** ```sql CREATE ...
Oracle数据库也支持递归查询,但使用的是`CONNECT BY`语句。对于同样的`menus`表,Oracle的查询可能如下: ```sql SELECT id, parent_id, name, level as depth FROM menus START WITH parent_id IS NULL CONNECT ...
在 MySQL 中,树形结构查询可以使用递归存储过程来实现。递归存储过程是一种特殊的存储过程,可以递归调用自身,以实现树形结构的查询。递归存储过程可以根据需要设置递归深度,以控制查询的深度。 在上面的例子中...
总的来说,这些存储过程的核心是通过动态生成SQL语句来处理无限级分类的增删改查操作,它们利用了SQL Server 2005的特性和功能,如递归查询、事务管理等,确保了在复杂的数据结构中的数据完整性和一致性。...
MySQL则是流行的开源关系型数据库管理系统,用于存储和管理数据。在这个留言本程序中,MySQL将存储每个留言的信息,如用户名、留言内容、时间戳等。PHP通过SQL查询与MySQL进行通信,执行插入、查询等操作。 关键...
MySQL 递归查询实现多分类查询 MySQL 递归查询是指在 MySQL 数据库中使用递归函数来实现树形结构数据的查询,例如部门表中某个部门的所有下属部分或者某个部分的所有上级部门。 在 MySQL 中实现递归查询需要使用...
然而,在MySQL中,由于不支持CTE,实现递归查询需要转换思路。可以通过将递归转换为迭代的方式,即使用循环和条件控制来替代递归。在递归深度已知且较浅的情况下,可以通过多次自关联的方式来平面化递归过程,但当...