现在有一条sql语句类似于:select a.code,b.name from a, (
select code,name from c union all (select code,name from d)
) b 
where a.code = b.code (+)该sql在AIX系统上的oracle(9.2.0.1)上无法执行成功,总报错:
ORA-00923: FROM keyword not found where expected然而在windows系统上的oracle(版本也是9.2.0.1)上,改sql语句却能正常执行。哪位高手能给指点一下迷津,oracle9i在AIX上遇到的这个问题如何解决?

解决方案 »

  1.   

    找到问题的原因了,是因为那个union all的缘故。如果把union all改为union,则sql语句就能正常执行。但是同样用户数据,同样的原始sql语句(包含union all),在windows上的oracle9.2.0.1的企业版上就能正确执行,但是在AIX上的oracle9.2.0.1的标准版上执行就会抛错:ORA-00923: FROM keyword not found where expected我怀疑这是特定版本oracle存在的一个bug,烦请哪位高手给解答一下。
      

  2.   

    把union all 后面这个"("")"去掉看看
    select a.code,b.name from a, (
    select code,name from c union all select code,name from d
    ) b 
    where a.code = b.code (+)
      

  3.   

    该sql在AIX系统上的oracle(9.2.0.1)
    我在AIX 5.2 oracle9.2.0.1测试通过
      

  4.   

    wiler(@_@) :真正的sql要比我例子中写到的要复杂一些,多关联了几张表。我也测试了一下,如果真是象例子中写的那样简单倒是也能通过,现在搞得真是有些莫名奇妙。现在的关键是如果把union all 改为union,我的sql就能正常执行,或者直接把原来的数据导出到windows上的oracle中,用原来的sql也能正常执行。
      

  5.   

    wiler(@_@) :我是在sqlplus中执行的sql,同样的sql,如果把用户数据从AIX上的oracle中导出到windows上的oracle中就可以正常执行。
      

  6.   

    select a.code,b.name from a, (
    (select code,name from c) union all (select code,name from d)
    ) b 
    where a.code = b.code (+)
    加个括号试试?
    另外看一下你aix上的数据库有没有坏包,坏视图,很多脚本在windows上发布没有问题,在aix上发布会出现问题的,检查一下你的库吧
      

  7.   

    sungangsg(sungang) :如何检查数据库上有没有坏包呢?
      

  8.   

    gechangwei(葛长伟) :不可见字符只的是指我的查询sql当中存在不可见的特殊字符吗?