语句如下: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
很是奇怪,该怎样写才不会出现错误呢?
调用的代码是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
其中的某几个字段,需要把特定的值转换成对应的字符串值,用 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请高手指教了