Oracle数据库版本 v9.2(32bit)
以下SQL语句在PLSQL Developer v9.0.2.4.0中执行是成功的。
但是在vb6中执行就会出以下错误错  误:ORA-00972: 标识过长
错误号:-2147217900
错误源:OraOLEDB
----------------sql----------------
select bd_psndoc5bd_deptdoc.deptcode As MyFld_1,bd_psndoc5bd_deptdoc.deptname As MyFld_2,Sum(Case When bd_accpsndoc42bd_defdoc.docname in ('汉族') then 1 else 0 end) As MyFld_3,Sum(Case When bd_accpsndoc42bd_defdoc.docname in ('回族') then 1 else 0 end) As MyFld_4 from bd_psndoc,bd_accpsndoc,om_job,om_jobdesc,bd_defdoc bd_accpsndoc42bd_defdoc,bd_deptdoc bd_psndoc5bd_deptdoc where bd_psndoc.dr=0 and bd_accpsndoc.dr=0 and bd_psndoc.pk_psndoc=bd_accpsndoc.pk_psndoc and bd_psndoc.pk_om_job=om_job.pk_om_job(+) and bd_psndoc.pk_om_job=om_jobdesc.pk_om_job(+) And bd_psndoc.pk_corp in('1002') And (1=1) And bd_accpsndoc.nationality=bd_accpsndoc42bd_defdoc.pk_defdoc(+) And bd_psndoc.pk_deptdoc=bd_psndoc5bd_deptdoc.pk_deptdoc(+) group by bd_psndoc5bd_deptdoc.deptcode,bd_psndoc5bd_deptdoc.deptname问题解决立即结贴!谢谢了

解决方案 »

  1.   

    列名长度超过30个字符了!select defdoc2.deptcode As MyFld_1,defdoc2.deptname As MyFld_2,Sum(Case When defdoc1.docname in ('汉族') then 1 else 0 end) As MyFld_3,Sum(Case When defdoc1.docname in ('回族') then 1 else 0 end) As MyFld_4 from bd_psndoc,bd_accpsndoc,om_job,om_jobdesc,bd_defdoc defdoc1,bd_deptdoc defdoc2 where bd_psndoc.dr=0 and bd_accpsndoc.dr=0 and bd_psndoc.pk_psndoc=bd_accpsndoc.pk_psndoc and bd_psndoc.pk_om_job=om_job.pk_om_job(+) and bd_psndoc.pk_om_job=om_jobdesc.pk_om_job(+) And bd_psndoc.pk_corp in('1002') And (1=1) And bd_accpsndoc.nationality=defdoc1.pk_defdoc(+) And bd_psndoc.pk_deptdoc=defdoc2.pk_deptdoc(+) group by defdoc2.deptcode,defdoc2.deptname
      

  2.   

    你的vb6连接的odbc数据源用的事什么版本的oracle driver驱动?
    Case When 自句只支持9i版本,8i的是没有这个的!
    如果确定是版本问题,可以用decode代替一下。
      

  3.   

    不是,8i绝对支持Case when,9i也支持,不过在9i中又出以下问题了。 
    对case when 不能做sum求和,在8i中是支持的啊。
      

  4.   

    就下面这句啊
    =========================================
    执行SQL查询时出错。
    错  误:ORA-00907: 缺少右括号
    错误号:-2147217900
    错误源:OraOLEDB
    ----------------sql----------------
    select T00000000003025.deptcode As MyFld_1,T00000000003025.deptname As MyFld_2,Sum(Case When T00000000003103.docname in ('4岗') then 1 else 0 end) As MyFld_3,Sum(Case When T00000000003103.docname in ('5岗') then 1 else 0 end) As MyFld_4 from bd_psndoc,bd_accpsndoc,om_job,om_jobdesc,bd_defdoc T00000000003103,bd_deptdoc T00000000003025 where bd_psndoc.dr=0 and bd_accpsndoc.dr=0 and bd_psndoc.pk_psndoc=bd_accpsndoc.pk_psndoc and bd_psndoc.pk_om_job=om_job.pk_om_job(+) and bd_psndoc.pk_om_job=om_jobdesc.pk_om_job(+) And bd_psndoc.pk_corp in('1002') And (1=1) And bd_accpsndoc.groupdef15=T00000000003103.pk_defdoc(+) And bd_psndoc.pk_deptdoc=T00000000003025.pk_deptdoc(+) group by T00000000003025.deptcode,T00000000003025.deptname