您好,欢迎访问一九零五行业门户网

Oracle 迁移至MySQL部分语句的转换

前几天把系统从oracle往mysql上迁移,很多的语句是比较简单的,就是一些函数的修改如to-date等
oracle 迁移至mysql部分语句的转换
[日期:2014-02-27]来源:linux社区 作者:jimmy609[字体:]
前几天把系统从oracle往mysql上迁移,很多的语句是比较简单的,就是一些函数的修改如to-date等
但是也有几个比较棘手的,这里记录下
第一、row_number() over(partition by 
首先要了解下oracle中这个函数的用法,看个例子
select t.*,row_number() over(partition by t.owner order by y.createdate desc) rn from test t
这个语句的意思就是,把test这个表的数据按照owner 分组并且给每个分组的里面的数据加上一个序列号,数据格式如下
id      name      owner  createdate  rn
1        aa            001                              1
2          bb          001                              2
3          cc            001                            3
4          dd            002                            1
5          ee          002                              2
6            ff            003                              1
数据搞得不太正规,但是应该能够看懂它的意思吧,
但是在mysql中是没有这个函数的于是乎,找啊找,,总算找了个解决方法,如下
select
    heyf_tmp.*,
    if(@pdept=heyf_tmp.owner ,@rn:=@rn+1,@rn:=1) as rn,
    @pdept:=heyf_tmp.owner
from
    (
        select
            yv.*
        from
            test yv
        order by
            yv.owner  ,
            yv.createdate  desc
    )
    heyf_tmp ,
    (
        select
            @rn :=0 ,
            @pdept := null ,
            @rn:=0
    )
    aa
具体是什么意思,不是很清楚,不过先解决问题再说
第二、oracle树形查询
oracle树形查询现成的方法
select distinct t.id as id, t.name
from test t
                start with id=‘’
              connect by prior id = parentid
但是mysql中是没有这个方法的,于是只能自己定义函数或者过程,我这里用的是过程
如下
create procedure pro_gettreelist`(in pid varchar(36))
begin
  declare lev int;
  set lev=1;
  drop table if exists tmp1;   
  create table tmp1(id varchar(40),name varchar(50),parentid varchar(40) ,levv int);   
  insert tmp1 select id,name,parent_id,1 from `test` where parent_id=pid;   
  while  row_count()>0
    do    set lev=lev+1;   
    insert tmp1 select t.id,t.name,t.parent_id,lev from testt join tmp1 a on t.parent_id=a.id and levv=lev-1;--查出子节点
  end while ;   
  insert tmp1 select id,name,parent_id,0 from test where id=pid;  --查出当前节点
end
这个存储过程应该都能看懂吧,就不做多解释了
其它类似信息

推荐信息