语句如下:SELECT HISTORYID,ID,TARGETID,case TARGETTYPE when 1 then 'Station' when 2 then 'Terminal' when 3 then 'User' else 'undefine' end as TARGETTYPENAME,TARGETNAME,case OPERATIONTYPE when 1 then 'Insert' when 2 then 'Delete' else 'undefine' end as OPERATIONTYPENAME,USERNAME,MAC,MODIFYTIME  FROM  MESSAGETARGET_LOG WHERE 1=1  AND ID='1000'  AND HISTORYID='1'  order by TARGETID, MODIFYTIME DESC 这个语句,在执行时,有时正常,有时就报错误:ORA-00923: 未找到要求的 FROM 关键字。
很是奇怪,该怎样写才不会出现错误呢?
调用的代码是vb.net,其中的db,strQuery是参数,db是已经连接的oracleConnection                    Using dbc As New OracleCommand(strQuery, db)
                        dbc.CommandType = CommandType.Text
                        Try
                            Using reader As OracleDataReader = dbc.ExecuteReader
                                dt.Load(reader)
                            End Using
                        Catch ex As Exception
                            ex.Data.Clear()
                            Exit Try
                        End Try
                    End Using

解决方案 »

  1.   

    sql文没有看出问题来,怀疑是解析的问题
      

  2.   

    MESSAGETARGET_LOG  是临时表?
      

  3.   

    MESSAGETARGET_LOG 不是临时表
    其中的某几个字段,需要把特定的值转换成对应的字符串值,用 case 来转换 偶尔会出上述的错误了
    现在虚拟个表来做了,很笨的办法,看有高手指点下,用什么该装那个版本的解释器能解决问题了。我现在改用这样的sql命令来执行了:
     SELECT tl.HISTORYID,tl.ID,tl.TARGETID,
            nvl(t2.TARGETTYPENAME,'undefine') as TARGETTYPENAME,
            tl.TARGETNAME,
            nvl(o1.OPERATIONTYPENAME,'undefine') as OPERATIONTYPENAME,
            tl.USERNAME,tl.MAC,tl.MODIFYTIME  
    FROM  MESSAGETARGET_LOG tl 
    left join (
    select 1 AS TARGETTYPE, 'Station' AS TARGETTYPENAME from dual 
    union 
    select 2 AS TARGETTYPE, 'Terminal' AS TARGETTYPENAME from dual 
    union 
    select 3 AS TARGETTYPE, 'User' AS TARGETTYPENAME from dual
    ) t2 on t2.TARGETTYPE=tl.TARGETTYPE 
    left join (
    select 1 AS OPERATIONTYPE, 'Insert' AS OPERATIONTYPENAME from dual 
    union 
    select 2 AS OPERATIONTYPE, 'Delete' AS OPERATIONTYPENAME from dual
    ) o1 on o1.OPERATIONTYPE=tl.OPERATIONTYPE 

    WHERE 1=1  AND ID='1000' AND HISTORYID='1'  order by tl.TARGETID, tl.MODIFYTIME DESC请高手指教了