前几天把系统从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 rn1 aa 001 12 bb 001 23 cc 001 34 dd 002 15 ee 002 26 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.namefrom 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
这个存储过程应该都能看懂吧,就不做多解释了更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12HBase自带压力测试Web系统从Oracle迁移至MySQL相关资讯 Oracle转MySQL
- Web系统从Oracle迁移至MySQL (02/27/2014 12:29:51)
本文评论 查看全部评论 (0)