mysql start with connect by_MYSQL实现Oracle的Start with…Connect By递归树查询

最近接触一个老项目,最初适配的数据库是oracle 后来迁移到mysql 。这个迁移是由一个已经离职的新手做的。这个新手对于很多oracle特有的函数及存储过程都没有进行迁移。导致系统很多功能都BUG了。失效了。

既然我遇到了,就尽量进行解决。刚刚遇到了一个存储过程中有使用oracle的Start with…Connect By递归树查询的。这个函数在mysql里面是没有的。但是我们可以通过自定义函数的方式来解决这个问题。

如我们有个表,表名为main_line ddl如下

CREATE TABLE `main_line` (

`line_id` varchar(17) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,

`pline_id` varchar(17) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,

PRIMARY KEY (`line_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

其中的pline_id为父line的line_id。

原sql中使用了(其中的v_id是一个字符串类型的参数)

select a.line_id from main_line a connect by  a.pline_id =prior a.line_id start with line_id=v_id

这个函数在mysql中没有。下面我们来实现一个自定义的函数来替代这个oracle特有的函数。

FUNCTION nw.getchildlinelist (rootId VARCHAR(100))

RETURNS VARCHAR(1000)

BEGIN

DECLARE pTemp VARCHAR(1000);

DECLARE cTemp VARCHAR(1000);

SET pTemp = '';

SET cTemp = rootId;

WHILE cTemp is not null DO

if (pTemp = '') then

SET pTemp = cTemp;

elseif(pTemp <> '') then

SET pTemp = concat(pTemp,',',cTemp);

end if;

SELECT group_concat(line_id) INTO cTemp FROM main_line

WHERE FIND_IN_SET(pline_id,cTemp)>0;

END WHILE;

RETURN pTemp;

END

这样 我们可以通过 select getchildlinelist(v_id) as line_id 来替代 select a.line_id from main_line a connect by  a.pline_id =prior a.line_id start with line_id=v_id

这样就相当于在mysql中实现了oracle的Start with…Connect By递归树查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kmplayer播放器 绿色免安装版 2016 中文版

软件名称&#xff1a; Kmplayer播放器 绿色免安装版 软件语言&#xff1a; 简体中文 授权方式&#xff1a; 免费软件 运行环境&#xff1a; Win 32位/64位 软件大小&#xff1a; 42.8MB 图片预览&#xff1a; 软件简介: Kmplayer播放器绿色免安装版&#xff0c;多功能的影音播放…

java 关闭时_java – 活动关闭时服务停止

我已经阅读了一些与这个问题相关的答案,它们似乎都是一样的&#xff1a;“使用START_STICKY运行您的服务”“在前台运行您的服务”“使用startService运行您的服务,不要绑定它”我正在做所有这些事情,我的服务STILL关闭并在每次关闭活动时重新启动.这不是IntentService.我也没有…

ie6 offsetWidth/offsetHeight无效

ie6 offsetWidth/offsetHeight无效可采用手动获取&#xff1a;offsetWidthparseInt(node.style.width)parseInt(node.style.paddingLeft)parseInt(node.style.paddingRight);offsetHeightparseInt(node.style.height)parseInt(node.style.paddingTop)parseInt(node.style.paddi…

什么是反向代理,如何区别反向与正向代理

转自&#xff1a;http://blog.csdn.NET/shixing_11/article/details/7106241 一直对反射代理的反向不知道如何理解&#xff0c;经过百度知道&#xff0c;再结合下面这幅图&#xff0c;总算弄清楚一点了。简单的说从一个局域网出来到服务端为正向&#xff0c;从客户端要进入一个…

java socket 浏览器_Socket实现Java和浏览器交互。

昨天写了段小程序&#xff0c;现贴出来看看。以下是socket的简单介绍。获取两台联通的机器之间的IP和端口号等信息。import java.io.IOException;import java.net.Socket;public class SockerDemo {public static void main(String[] args) throws IOException {Socket socket …

C常用函数

///printf()%d 整数%f 浮点%p 指针地址 ///bzero(void *s, int n);原型&#xff1a;extern void bzero(void *s, int n);  用法&#xff1a;#include <string.h>  功能&#xff1a;置字节字符串s的前n个字节为零。 ///FD_ZERO(fd_set *fdset);将指定的文件描述符集清…

HashMap和ConcurrentHashMap的区别,HashMap的底层源码。

Hashmap本质是数组加链表。根据key取得hash值&#xff0c;然后计算出数组下标&#xff0c;如果多个key对应到同一个下标&#xff0c;就用链表串起来&#xff0c;新插入的在前面。 ConcurrentHashMap&#xff1a;在hashMap的基础上&#xff0c;ConcurrentHashMap将数据分为多个s…

mudos开发简介

首先我们应该知道mudos提供哪些服务我们可以从许多lib中找到我们需要什么假设我们的lib还是拥有很多现在mud的特性 比如战斗 人物和世界我们需要一些最基本的东西比如 master.c user.c login.c <include>你完全可以使用不一样的文件名 甚至修改出自己的mudos 你也可以完全…

java hanoi塔问题_java 解决汉诺塔问题

//汉诺塔问题//HanYang 2016/10/15import java.util.Scanner;//输出public class Hanuota {public static void Show(String a,String b){System.out.print(" " a "->" b " " );}//从a移到cpublic static void Fun(int n, String a,Strin…

心跳防护程序

心跳防护程序的作用心跳防护程序用于实现无人值守的程序的自维护功能&#xff0c;使得被防护程序由于某种异常而导致崩溃时可以自动重新启动&#xff0c;满足无人值守的环境要求。心跳防护程序适用于那些需要无人值守&#xff0c;长期运行&#xff0c;但程序由于不确定性因素有…

[水煮 ASP.NET Web API2 方法论](1-1)在MVC 应用程序中添加 ASP.NET Web API

问题 怎么样将 Asp.Net Web Api 加入到现有的 Asp.Net MVC 项目中 解决方案 在 Visual Studio 2012 中就已经把 Asp.Net Web Api 自动地整合到了 MVC 项目模板中。自 Visual Studio 2013 以后&#xff0c;创建 ASP.Net Web应用程序使用的是一种新的"One ASP.NET"项目…

java io流文件损坏_java使用io流下载.docx. xlsx文件,出现文件损坏提示

介绍在使用io流下载服务器上的资源文件时&#xff0c;出现以下提示&#xff1a;但是选择“是”后文件可以正常打开参考 代码如下&#xff1a;[codesyntax lang"java"]RequestMapping(value "downLoadInstruction")public void downLoadInstruction(HttpSe…

java des对称加密_JAVA加密解密DES对称加密算法

1 下面用DES对称加密算法(设定一个密钥&#xff0c;然后对所有的数据进行加密)来简单举个例子。23 首先&#xff0c;生成一个密钥KEY。4 我把它保存到key.txt中。这个文件就象是一把钥匙。谁拥有它&#xff0c;谁就能解开我们的类文件。代码参考如下&#xff1a;5 packagecom.n…

计算机的存储单位

位 bit (比特)(Binary Digits)&#xff1a;存放一位二进制数&#xff0c;即 0 或 1&#xff0c;最小的存储单位。字节 byte&#xff1a;8个二进制位为一个字节(B)&#xff0c;最常用的单位。计算机存储单位一般用B&#xff0c;KB&#xff0c;MB&#xff0c;GB&#xff0c;TB&am…

C内存管理详解

【规则1】用malloc或new申请内存之后&#xff0c;应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。 【规则2】不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。 【规则3】避免数组或指针的下标越界&#xff0c;特别要当心发生“多1”或者“…

Dubbo xml配置 和注解配置 写法

<?xml version"1.0" encoding"UTF-8"?><!-- - Copyright 1999-2011 Alibaba Group. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the Licen…

java solr_通过Java访问Solr服务实例及相关配置

一、通过Java访问Solr服务(手动创建索引库)1、创建项目&#xff0c;配置环境(导包及相关文件)1、SolrJ核心包 /solr-4.10.3/dist/solr-solrj-4.10.3.jar2、SolrJ依赖包 /solr-4.10.3/dist/solrj-lib下的所有包3、日志依赖包 /solr-4.10.3/example/lib/ext目录下的所有jar包4、J…

WCF RIA优缺点

优点&#xff1a;WCF RIA提供方便的数据访问形式&#xff0c;服务端代码写在.cs文件中继承DomainService&#xff0c;类前要声明[EnableClientAccess()]生成后sliverlight项目中/Generated_Code下会有对应的.g.cs文件&#xff0c;该文件会包含WCF RIA服务中各方法的访问方法。缺…

SpringMVC+MyBatis 返回时间格式转换的解决方案

Spring MVC 4.X ResponseBody 日期类型Json 处理 摘自http://tramp-zzy.iteye.com/blog/2090330 2014-07-10方法一&#xff1a;全局处理 <mvc:annotation-driven> <!-- 处理responseBody 里面日期类型 --> <mvc:message-converters> …

SqlServer Split功能函数

CREATE FUNCTION [dbo].[StrSplit](str nvarchar(max), --源字符串split varchar(32) --分隔符)RETURNS t TABLE(col nvarchar(max))AS BEGINWHILE(charindex(split,str)<>0) BEGININSERT t(col) VALUES(substring(str,1,charindex(split,str)-1))SET str stuff(s…