Oracle转换MySql之递归start with详解

 更新时间:2024年12月23日 09:04:10   作者:海沫汐  
Oracle中的`startwith`函数在MySQL中需要转换为使用`LIKE`操作符,并且可能需要自定义函数来实现类似的功能

Oracle转换MySql之递归start with

Oracle转换Mysql之start with

oracle转mysql其实很多细节,这边就不一 一 描述了,这边先整理些“坎”吧!

Oracle中start with…

  select * from 
  	grade_group gg 
  start with gg.group_code=#{groupCode} 
  connect by  gg.parent_id= prior gg.id
  order by gg.group_level

转换为MySql为

  SELECT
      *
  FROM
      grade_group
  WHERE FIND_IN_SET(ID, getGradeGroupChild(#{groupCode}))
  ORDER BY group_level

这里并非只要简单改下sql就行

可以看出需要一个函数支撑"getGradeGroupChild"

下面提供了这个函数

DROP FUNCTION IF EXISTS `getGradeGroupChild`;
DELIMITER $$ 
CREATE FUNCTION `getGradeGroupChild`(GROUPCODE VARCHAR(100)) RETURNS VARCHAR(10000) CHARSET utf8
BEGIN
   DECLARE sChildList VARCHAR(10000);
   DECLARE sChildTemp VARCHAR(1000);
   --这里我第一次是要将传进来的GROUPCODE 转换成id,然后去递归查询
   SELECT id INTO sChildTemp FROM grade_group WHERE GROUP_CODE = GROUPCODE;
   WHILE sChildTemp IS NOT NULL DO
	 IF (sChildList IS NOT NULL) THEN 
		SET sChildList = CONCAT(sChildTemp,',',sChildList); 
	 ELSE 
		SET sChildList = CONCAT(sChildTemp); 
	 END IF; 
     SELECT GROUP_CONCAT(id) INTO sChildTemp FROM grade_group 
     WHERE FIND_IN_SET(PARENT_ID, sChildTemp)>0;
   END WHILE;
   RETURN sChildList;
 END$$
DELIMITER ;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • ORACLE锁机制深入理解

    ORACLE锁机制深入理解

    若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性,加锁是实现数据库并发控制的一个非常重要的技术,需要的朋友可以了解下
    2012-12-12
  • oracle if else语句使用介绍

    oracle if else语句使用介绍

    Oracle if else 语句的写法及应用介绍,详细可参考本文
    2012-11-11
  • Oracle相关组件版本信息的介绍

    Oracle相关组件版本信息的介绍

    今天小编就为大家分享一篇关于Oracle相关组件版本信息的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • oracle连接数据库报错ORA-12170:TNS连接超时解决办法

    oracle连接数据库报错ORA-12170:TNS连接超时解决办法

    这篇文章主要给大家介绍了关于oracle连接数据库报错ORA-12170:TNS连接超时的解决办法,ORA-12170是Oracle数据库连接错误,表示数据库连接超时,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • Oracle数据库中删除表空间的详细步骤与示例代码

    Oracle数据库中删除表空间的详细步骤与示例代码

    在 Oracle 数据库中,表空间是存储数据的逻辑容器,有时候,我们可能需要删除不再使用的表空间以释放空间或进行数据库重组,本文将详细介绍在 Oracle 数据库中删除表空间的步骤和示例代码,需要的朋友可以参考下
    2024-01-01
  • Navicat Premium连接Oracle数据库的2种方式

    Navicat Premium连接Oracle数据库的2种方式

    这篇文章主要给大家介绍了关于Navicat Premium连接Oracle数据库的2种方式,大家要使用Navicat Premium连接Oracle数据库,请按照以下步骤操作,需要的朋友可以参考下
    2024-01-01
  • SQL Developer迁移第三方数据库单表到Oracle的全过程

    SQL Developer迁移第三方数据库单表到Oracle的全过程

    这篇文章主要介绍了SQL Developer迁移第三方数据库单表到Oracle的全过程,文章通过图文结合的方式给大家讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-06-06
  • rman恢复方案和oracle异机恢复

    rman恢复方案和oracle异机恢复

    这篇文章主要介绍了rman恢复方案和oracle异机恢复,需要的朋友可以参考下
    2014-03-03
  • oracle保留两位小数解决方案

    oracle保留两位小数解决方案

    公司需要处理一些报表,需要使用百分率,保留2位小数,只用round和trunc函数都可以实现(round(_data,2) ),只是格式不是很工整,对格式要求不严谨的情况下使用round即可
    2012-11-11
  • Oracle导出excel数据

    Oracle导出excel数据

    oracle导出excel(非csv)的方法有两种,1、使用sqlplus spool,2、使用包体,接下来通过本文给大家介绍Oracle导出excel数据,需要的朋友参考下
    2016-03-03

最新评论