create or replace function f_xxcg_kqtjzb
(p_dwid in varchar2, --单位
p_ry in varchar2, --人员姓名(模糊匹配)
p_startDate in varchar2, --开始时间
p_endDate in varchar2 ) --结束时间
return kqtjzb_table_type pipelined
is
/**
* 根据查询条件,统计考勤相关数据
* author: cjianquan
* date: 2015-4-20
*/
v_query_sql varchar2(4000) ; --动态查询sql
type cur_type is REF CURSOR;--定义游标类型
rtn_cur cur_type; --定义游标变量
v_kqtjzb_row kqtjzb_row_type;--考勤统计的行数据
type dwry_type is record(
dw varchar2(100) ,
ryid varchar2(100),
wdkcl int
);
dwry_record dwry_type;
begin
v_query_sql:='select distinct a.rypbsz_ssdw, b.ryzbszmx_ryid,a.RYPBSZ_WDKCL'
||' from tbl_kqxt_ryzbsz a,tbl_kqxt_ryzbszmx b'
||' where a.ryzbsz_id=b.ryzbszmx_fk ';
if p_dwid is not null then
v_query_sql:=v_query_sql||' '||'and a.rypbsz_ssdwid='''||p_dwid||'''';
end if;
if p_ry is not null then
v_query_sql:=v_query_sql||' '||'and b.ryzbszmx_ryxm like ''%'||p_ry||'%''';
end if;
if p_startDate is not null then
v_query_sql:=v_query_sql||' '||'and to_date(b.RYZBSZMX_RQ,''yyyy-MM-dd'') >= to_date('''||p_startDate||''',''yyyy-MM-dd'')';
end if;
if p_endDate is not null then
v_query_sql:=v_query_sql||' '||'and to_date(b.RYZBSZMX_RQ,''yyyy-MM-dd'') <= to_date('''||p_endDate||''',''yyyy-MM-dd'')';
else
v_query_sql:=v_query_sql||' '||'and to_date(b.RYZBSZMX_RQ,''yyyy-MM-dd'') <=sysdate';
end if;
dbms_output.put_line(v_query_sql);
--打开游标
open rtn_cur for v_query_sql;
loop
--循环游标,将记录放至dwry_record
fetch rtn_cur into dwry_record;
exit when rtn_cur%NOTFOUND;
--调用函数f_xxcg_kqtjzb_row得到一行数据
if p_endDate is not null then
v_kqtjzb_row:=f_xxcg_kqtjzb_row(dwry_record.dw,dwry_record.ryid,p_startDate,p_endDate,dwry_record.wdkcl);
pipe row(v_kqtjzb_row);
else
v_kqtjzb_row:=f_xxcg_kqtjzb_row(dwry_record.dw,dwry_record.ryid,p_startDate,to_char(sysdate,'yyyy-MM-dd'),dwry_record.wdkcl);
pipe row(v_kqtjzb_row);
end if;
end loop;
return;
end;
oracle函数返回结果集(动态查询Sql并定义游标)
最新推荐文章于 2024-06-25 21:09:39 发布