oracle 存储过程 游标嵌套
2015-08-26 09:36
381 查看
这是一段将设备的GPS数据的工作小时数进行统计的存储过程,首先通过游标取出所有设备信息,然后对每一台设备进行工作小时数统计,其中用到了游标嵌套
CREATE OR REPLACE PROCEDURE CMTOOLS.proc_statistics_workhour IS v_beginDate date; v_endDate date; v_recordCount number; v_recordIndex number; v_statistical_uuid char(36); v_workhour number; v_gpsDate date; v_equipId char(36); /*定义游标 取出所以安装GPS的设备*/ CURSOR c_equipRows IS SELECT EQUIP_ID FROM EQUIP_EQUIPMENT WHERE GPS_TYPE>0; BEGIN SELECT COUNT(*) INTO v_recordCount FROM GPS_STATISTICAL_DATE; IF v_recordCount>0 THEN BEGIN SELECT MAX(STATISTICAL_DATE)+1 INTO v_beginDate FROM GPS_STATISTICAL_DATE; END; ELSE BEGIN SELECT MIN(GPS_DATE) INTO v_beginDate FROM GPS_MONITOR_DATA; END; END IF; v_beginDate := to_date(to_char(v_beginDate,'yyyy-mm-dd') || ' 00:00:00','yyyy-mm-dd hh24:mi:ss'); WHILE v_beginDate < sysdate-1 LOOP BEGIN v_endDate := to_date(to_char(v_beginDate,'yyyy-mm-dd') || ' 23:59:59','yyyy-mm-dd hh24:mi:ss'); BEGIN SELECT get_uuid() INTO v_statistical_uuid FROM dual; INSERT INTO GPS_STATISTICAL_DATE VALUES(v_statistical_uuid,to_date(to_char(v_beginDate,'yyyy-mm-dd'),'yyyy-mm-dd')); FOR equipRow IN c_equipRows LOOP BEGIN v_equipId := equipRow.equip_id; v_recordIndex:=1; v_workhour:=0; FOR gpsRow IN (SELECT * FROM TABLE(FUN_WORKHOUR_DT(v_equipId,v_beginDate,v_endDate))) LOOP BEGIN IF v_recordIndex mod 2 = 0 THEN BEGIN v_workhour := v_workhour + ROUND((gpsRow.GPS_DATE-v_gpsDate)*24,2); END; END IF; v_recordIndex := v_recordIndex+1; v_gpsDate := gpsRow.GPS_DATE; END; END LOOP; INSERT INTO GPS_STATISTICAL_WORKHOUR VALUES(get_uuid(),v_statistical_uuid,equipRow.equip_id,v_workhour); END; END LOOP; END; v_beginDate := v_beginDate+1; END; END LOOP; EXCEPTION WHEN OTHERS THEN ROLLBACK; END proc_statistics_workhour;
相关文章推荐
- Oracle-Function&Procedure&Package
- Oracle函数
- Oracle相关概念
- oracle 添加输出数据集的函数
- Oracle命令
- Oracle返回表集合函数
- ORACLE EBS常用表
- oracle监听和实例启动顺序浅谈
- 以Oracle数据库为目标的数据库进阶(三、四)
- ORACLE/SQL用函数进行每年,每月,每周,每日的数据汇总
- oracle 跨数据关联查询
- 数据库连接池配置 - Oracle,SQL Server,DB2,MYSQL,SQLLITE3
- oracle对象
- oracle 数据备份之exp优化
- Oracle Tablespace
- Oracle Profile
- navicat连接oracle报错ORA-12737: Instant Client Light: unsupported server character set CHS16GBK”
- 陈焕生:深入理解Oracle 的并行执行
- 深入理解Oracle的并行操作
- 包子的 oracle 学习笔记---创建数据库