请教一个oracle的存储过程问题~~~~~~我现在有两张表,一张是体温表,一张是员工表,分别如下:体温表: t_ide_o
请教一个oracle的存储过程问题~~~~~~
我现在有两张表,一张是体温表,一张是员工表,分别如下:
体温表:
t_id e_obid t_checkdate t_temperature
1 1 2012-3-2 11:11:11 36
2 1 2012-3-3 12:11:11 37.5
3 2 2012-3-2 11:11:11 36.5
4 2 2012-3-3 12:11:11 38
员工表:
e_id e_name
1 小李
2 小陈
我想在oracle写一个存储过程实现传入年份,得到这一年每个月体温大于37的人次,如果没有的话就显示0,预想的效果是这样:
日期 异常人次
2012-1 0
2012-2 0
2012-3 1
.
.
2012-12 0
先谢谢了!
[解决办法]
create or replace package pkg_test is
procedure year_test(results_out out sys_refcursor,v_year in integer);
end pkg_test;
create or replace package body pkg_test is
procedure year_test(results_out out sys_refcursor, v_year in integer)
is
begin
open results_out for
with m as ( --这个临时表如果能事先建好,一句sql就可以了
select to_date(v_year
------解决方案--------------------
'-1-1','yyyy-mm-dd') begin_time,
to_date(v_year
[解决办法]
'-2-1','yyyy-mm-dd') end_time from dual
union all
select to_date(v_year
[解决办法]
'-2-1','yyyy-mm-dd') begin_time,
to_date(v_year
[解决办法]
'-3-1','yyyy-mm-dd') end_time from dual
--中间各个月份省略
union all
select to_date(v_year
[解决办法]
'-12-1','yyyy-mm-dd') begin_time,
to_date((v_year+1)
[解决办法]
'-1-1','yyyy-mm-dd') end_time from dual
)
select m.begin_time "日期", sum(case when t.t_temperature>37 then 1 else 0 end) "异常人次"
from m left outer join table t on t.t_checkdate>=m.begin_time and t.t_checkdate<m.end_time
group by m.begin_time order by m.begin_time;
end pro_test;
end pkg_test;
[解决办法]
一个for确定每个月月初月末,
循环里面取到月初月末,通过子查询查出结果
这些东西最好自己尝试去写,这应该是个很简单的东西
存储过程能用的工具太多太多,表、视图、数组。。。
