我有两个表:T_ALARM和T_RESPONSESTATUS
T_ALARM中有一条记录有一个字段STATE,这个字段中存放的是对应T_RESPONSESTATUS表中的RESPONSESTATUSID的多个以逗号分隔的值,如:5,7,8,152,25,32,33,60,现在我要将T_ALARM中的此条记录,显示成如下形式:
HISTORY_ID RESPONSESTATUSID RESPONSESTATUS
626371138152关键点内两次点火
6263711385劫警
6263711387申请信息服务
6263711388遥控报警
62637113825车门已上锁
62637113832车辆撤防
62637113833车辆发动
62637113860空车
其中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