我有两个表:T_ALARM和T_RESPONSESTATUS
T_ALARM中有一条记录有一个字段STATE,这个字段中存放的是对应T_RESPONSESTATUS表中的RESPONSESTATUSID的多个以逗号分隔的值,如:5,7,8,152,25,32,33,60,现在我要将T_ALARM中的此条记录,显示成如下形式:
HISTORY_ID RESPONSESTATUSID RESPONSESTATUS
626371138 152 关键点内两次点火
626371138 5 劫警
626371138 7 申请信息服务
626371138 8 遥控报警
626371138 25 车门已上锁
626371138 32 车辆撤防
626371138 33 车辆发动
626371138 60 空车
其中HISTORY_ID是T_ALARM表中的,RESPONSESTATUSID RESPONSESTATUS是T_RESPONSESTATUS表中的。
responsestatusid 是number类型
t.state是字符串型字段,值如:7,25,32,33,60 当然是s.responsestatusid 可能的值啦!
如果语句写为:
select t.*,s.responsestatus from t_alarm t,t_responsestatus s where s.responsestatusid
in (7,25,32,33,60) and s.isalarm=1
而写为:
select t.*,s.responsestatus from t_alarm t,t_responsestatus s where s.responsestatusid
in (t.state) and s.isalarm=1
是有问题的.
个人估计,由于t.state是字符串型值,所以可能真正的语句变成了:
select t.*,s.responsestatus from t_alarm t,t_responsestatus s where s.responsestatusid
in ('7,25,32,33,60') and s.isalarm=1
而s.responsestatusid是数字型值,所以出"ORA-01722错误".
正确的写法:
SELECT T.HISTORY_ID,S.RESPONSESTATUSID,S.RESPONSESTATUS --T.UNIT_ID,T.LON,T.LAT,T.COURSE,T.SPEED,
FROM T_ALARM T, T_RESPONSESTATUS S
WHERE INSTR(',' || T.STATE || ',', ',' || S.RESPONSESTATUSID || ',') > 0
--AND S.ISALARM = 1
AND T.HISTORY_ID = 626371138