由于不同的客户他们要求的数据库服务器不一样,有的要求是sqlserver,而有的要求是oracle。所以本周的任务就是把整个项目移植到oracle。
本人一直在用sqlserver 2005,而oracle基本是从零开始学,虽然以前上了几节课,可后来也没怎么用,所以基本全换给老师了。废话少说,就当作一次学习的机会吧:
sqlserver 2005脚本语句:
select distinct D.DOC_ID,D.DOC_NAME,m.release_date as CREATEDATE,D.CAT_ID,C.CAT_NAME,C.CAT_CODE,U.ID_,U.NAME_,U.DISPLAYNAME_
from tb_document d,tb_doc_catalog c,wf_org_user u ,tb_doc_modcontent m
where c.cat_id=d.cat_id and u.name_=d.userid and m.doc_id=d.doc_Id
and
d.doc_id in(
select * from (
select top 2 doc_id from tb_doc_modcontent where cat_Id=2 order by release_date desc
union
select top 5 doc_id from tb_doc_modcontent where cat_Id=3 order by release_date desc
union
select top 4 doc_id from tb_doc_modcontent where cat_Id=53 order by release_date desc
) t) order by m.release_date desc
经过修改为oracle脚本语句为:
select distinct D.DOC_ID,D.DOC_NAME,m.release_date
CREATEDATE,D.CAT_ID,C.CAT_NAME,C.CAT_CODE,U.ID_,U.NAME_,U.DISPLAYNAME_
from tb_document d,tb_doc_catalog c,wf_org_user u ,tb_doc_modcontent m
where c.cat_id=d.cat_id and u.name_=d.userid and m.doc_id=d.doc_Id
and
d.doc_id in(
select * from (
select * from (
select doc_id from tb_doc_modcontent where cat_Id=2 order by release_date desc
) where ROWNUM<=2 ORDER BY ROWNUM ASC
union
select * from (
select doc_id from tb_doc_modcontent where cat_Id=3 order by release_date desc
) where ROWNUM<=5 ORDER BY ROWNUM ASC
union
select * from (
select doc_id from tb_doc_modcontent where cat_Id=53 order by release_date desc
) where ROWNUM<=4 ORDER BY ROWNUM ASC
) t
) order by m.release_date desc
可当我运行的时候却报:ORA-00907:缺少右括号。
我把括号一个个对齐,发现并没有括号不匹配问题,后来在csdn上看到这个帖子才知:
http://topic.csdn.net/u/20081216/11/181236c9-3308-4cb4-99f4-d826bc44a11a.html
楼主写的语句为:
| ||
|
** |
所以我也一个个去掉我语句中的三个ORDER BY ROWNUM ASC,再次运行终于没问题了。 |