目前在做一个数据处理,源表名叫alarm有这样几列senname,alarmnum,alarmtime,idx等(用到的就是这几列,分别表示数据名、报警信息、报警时间和标志位)。里面的数据都是一行一行的互不重复,一共18行(idx,从1到16是雨量,17/、18是水位)比如(其中三行)
senname, ||| alarmnum, ||| alarmtime, ||| idx
站点1 ||| 38 ||| 2010-9-1 16:00:00 ||| 1
站点2 ||| 40 ||| 2010-8-27 00:00:00 ||| 2
站点3 ||| 3.9 ||| 2010-9-1 16:00:00 ||| 17
我需要一个存储过程,把与系统时间相差5分钟之内的这几行数据合并,并写到另外一个表alarmlog内比如当前时间是2010-9-1 16:03分,合并后的数据应该是senid,||| alarmlog , ||| alarmtime
10000 ||| XX区汛情信息 2010-9-1 16:00:站点1 雨量 38毫米,站点3 水位 3.9米,||| 2010-9-1 16:03:00到16点08分再运行这个脚本,就啥都不发生,数据还是一样的这个好像有点开发量,我以前是做自控的,现在在转软件,在sql下我以前实现过,现在在oracle,很头疼,大虾们帮我开个头,我后面十几条数据我自己可以并
senname, ||| alarmnum, ||| alarmtime, ||| idx
站点1 ||| 38 ||| 2010-9-1 16:00:00 ||| 1
站点2 ||| 40 ||| 2010-8-27 00:00:00 ||| 2
站点3 ||| 3.9 ||| 2010-9-1 16:00:00 ||| 17
我需要一个存储过程,把与系统时间相差5分钟之内的这几行数据合并,并写到另外一个表alarmlog内比如当前时间是2010-9-1 16:03分,合并后的数据应该是senid,||| alarmlog , ||| alarmtime
10000 ||| XX区汛情信息 2010-9-1 16:00:站点1 雨量 38毫米,站点3 水位 3.9米,||| 2010-9-1 16:03:00到16点08分再运行这个脚本,就啥都不发生,数据还是一样的这个好像有点开发量,我以前是做自控的,现在在转软件,在sql下我以前实现过,现在在oracle,很头疼,大虾们帮我开个头,我后面十几条数据我自己可以并
SELECT '10000 ||| XX区汛情信息 '||
wm_concat(to_char(alarmtime,'yyyy-mm-dd hh24:mi')||' '||senname||decode(idx,1,'雨量 ',17,'水位 ')||alarmnum||decode(idx,1,'毫米 ',17,'米 ')||
' ||| '||to_char(SYSDATE,'yyyy-mm-dd hh24:mi')
FROM TABLE
WHERE alarmtime>=SYSDATE-5/24/60
wm_concat(to_char(alarmtime,'yyyy-mm-dd hh24:mi')||' '||senname||decode(idx,1,'雨量 ',17,'水位 ')||alarmnum||decode(idx,1,'毫米 ',17,'米 '))||
' ||| '||to_char(SYSDATE,'yyyy-mm-dd hh24:mi')
FROM TABLE
WHERE alarmtime>=SYSDATE-5/24/60
另外你还可以用递归查询来实现,麻烦些,但是通用.
FROM TABLE WHERE alarmtime>=SYSDATE-5/24/60 )
SELECT '10000 ||| XX区汛情信息 '||SYS_CONNECT_BY_PATH(content ,',')))||
' ||| '||to_char(SYSDATE,'yyyy-mm-dd hh24:mi')
FROM t WHERE connect_by_isleaf=1 START WITH rn=1 CONNECT BY PRIOR t.rn=t.rn-1