需要对Oracle查询结果进行不同记录间的 数据分析, 网上找了下, 找到一种类似编程语言的语法 DECLARE
//声明变量
BEGIN
//具体操作
if then
//..
end if;
loop
//..
end Loop;
END;
具体为DECLARE
TYPE c1 IS REF CURSOR;
dateLast date ;
dateNow date ;
cBQHM t_rfid_passcar_i.Bqhm%TYPE;-- BQHM
cLastBQHM t_rfid_passcar_i.Bqhm%TYPE;-- BQHM
bHaveLast BOOLEAN := FALSE;
temp_cursor c1;
iContrast NUMBER(10) := 0;
iIndex NUMBER(10) := 0;
BEGIN
OPEN temp_cursor
FOR
SELECT BQHM, JRSJ FRom t_rfid_passcar_i where BQHM IN
(select BQHM from t_rfid_passcar_i group by BQHM having count(*)>1)
order by "BQHM" ASC, "JRSJ" ASC;
LOOP
FETCH temp_cursor INTO cBQHM, dateNow;--获得当前记录的数据
EXIT WHEN temp_cursor%NOTFOUND;
IF bHaveLast THEN
BEGIN
iContrast := ROUND(to_number(dateNow - dateLast) * 24 * 60 * 60) ;
IF cLastBQHM = cBQHM THEN
IF iContrast < (60 * 20) THEN
iIndex := iIndex + 1;
dbms_output.put_line(iIndex || " " || cBQHM || " " || iContrast || " " || dateLast || " "|| dateNow || " " );
END IF;
END IF;
END;
END IF;
--dbms_output.put_line("-----------" || iIndex || cBQHM || " " || iContrast || " " || dateLast || " "|| dateNow || " " );
dateLast := dateNow;
cLastBQHM := cBQHM;
bHaveLast := TRUE;
--dbms_output.put_line(to_char(dateNow, "yyyy-mm-dd hh24:mi:ss"));
END LOOP;
CLOSE temp_cursor;
END;可以像c++等其他语言那样编程对记录集进行操作, 写了一下午,终于 实现了对结果集 不同记录的统计. 后来才发现这叫存储过程 哈哈, 原来sql也可以编程. Oracle备份--概念篇Oracle建表并加自增序列相关资讯 Oracle存储过程
- Oracle存储过程拼接in语句 & 自定 (今 09:21)
- 【PL/SQL系列】Oracle存储过程使用 (04月23日)
- Oracle存储过程及Java调用 (05/28/2015 20:29:33)
| - Java调用Oracle存储过程返回多条结 (04月29日)
- Oracle中的存储过程简单应用 (04月10日)
- 判断点是否落在面中的Oracle存储过 (05/09/2015 09:39:30)
|
本文评论 查看全部评论 (0)
评论声明- 尊重网上道德,遵守中华人民共和国的各项有关法律法规
- 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
- 本站管理人员有权保留或删除其管辖留言中的任意内容
- 本站有权在网站内转载或
|