oracle中union脚本报“缺少右括号”问题

由于不同的客户他们要求的数据库服务器不一样,有的要求是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

楼主写的语句为:

SELECT gzb.GZCLR,mkjb.mkjmc,gzb.LX,gzb.JGLX,gzb.CLJG,gzb.DHHM,gzb.YHMC,gzb.LXDH,gzb.GZXX1,gzb.CLRQ,gzb.CLSJ FROM GZB,YHXXB,MKJB where yhxxb.SSJB=mkjb.mkjh AND yhxxb.dhhm=gzb.dhhm and gzb.ZT='运行' and (gzb.CLRQ between to_date('2008-10-28 ','yy-mm-dd') and to_date('2008-10-28 ','yy-mm-dd')) and gzb.LX='普通' order by GZCLR,mkjb.mkjmc,gzb.LX,gzb.JGLX
UNION
SELECT gzb.GZCLR,'无' AS MKJMC,gzb.LX,gzb.JGLX,gzb.CLJG,gzb.DHHM,gzb.YHMC,gzb.LXDH,gzb.GZXX1,gzb.CLRQ,gzb.CLSJ FROM GZB where gzb.ZT='停用' and (gzb.CLRQ between to_date('2008-10-28 ','yy-mm-dd') and to_date('2008-10-28 ','yy-mm-dd')) and gzb.dhhm not in (select dhhm from yhxxb) and gzb.LX='普通' order by GZCLR,gzb.LX,gzb.JGLX
其中有人给出
 

 

**

#14楼 得分:20回复于:2008-12-16 15:21:01
           只能用一个Order by

           把前一句的order by 去掉

 

 

所以我也一个个去掉我语句中的三个ORDER BY ROWNUM ASC,再次运行终于没问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值