NGPRLIS_DEV_EWMP> SELECT distinct t.id as tmpId, t.* FROM SYS_MENU t CONNECT BY PRIOR t.parent_id = t.id START WITH t.status ='1' [2023-05-30 11:23:37] [72000][1436] ORA-01436: 用户数据中的 CONNECT BY 循环 [2023-05-30 11:23:37] Position: 51 帮我解决
时间: 2024-02-10 07:04:45 浏览: 44
这个错误是由于您的查询中存在循环引用造成的。在您的查询中,连接条件是`t.parent_id = t.id`,这意味着您正在尝试使用父菜单ID连接到其自身的ID上。这将导致无限递归连接,直到超出数据库的最大递归深度或出现错误。
要解决这个问题,您需要检查您的数据,找出哪些菜单项的父级菜单ID指向自身或其后代,然后将其更正。您可以使用一个简单的SQL查询来检查这个问题:
```
SELECT *
FROM SYS_MENU
WHERE CONNECT_BY_ISCYCLE = 1
```
这将返回所有存在循环引用的菜单项。找到这些菜单项后,您需要将它们的父级菜单ID更正为其他有效的菜单项,以解决循环引用问题。
相关问题
<select id="selectTreeByCondition" resultType="com.generalichina.ewmp.api.system.entity.SysMenuEntity"> SELECT distinct t.id as tmpId, t.* FROM SYS_MENU t CONNECT BY PRIOR t.parent_id = t.id START WITH 1 = 1 <if test="data.name!=null and data.name !="""> AND t.name LIKE concat(concat('%', #{data.name}), '%') </if> <if test="data.status!=null"> AND t.status = #{data.status} </if> </select>
这是一个 MyBatis 的 SQL 语句,用于查询 SYS_MENU 表中符合条件的数据。其中使用了 CONNECT BY PRIOR 连接关键词,表示按照 parent_id = id 的关系进行自连接,即查询出所有的子孙节点。START WITH 1 = 1 表示从根节点开始查询。此外,该语句还使用了 IF 标签进行条件判断,根据不同的条件拼接查询条件。如果 data.name 不为 null 且不为空字符串,则拼接以 data.name 为 LIKE 匹配条件的查询条件;如果 data.status 不为 null,则拼接以 data.status 为查询条件的查询条件。最终查询结果使用 SysMenuEntity 类型进行封装返回。
阅读全文