- --获取当前日期函数
Function Fn_GetCurrentDate Return Varchar2
Is
v_CurrentDate VARCHAR2(19);
Begin
Select to_char(sysDate,'yyyy-MM-dd')
Into v_CurrentDate
From dual;
Return V_CurrentDate;
End Fn_GetCurrentDate;
2、--获取指定日期之间的连续日期数据集
Function Fn_GetDateList(v_startDate varchar2, v_endDate varchar2) Return recordType
Is
v_dateRecord recordType;
Begin
Open v_dateRecord For
Select TO_DATE(v_startDate, 'YYYY-MM-DD') + NUMTODSINTERVAL(level, 'day') thisDate
From dual
Connect By Level <= To_Date(v_endDate,'yyyy-mm-dd') - To_Date(v_startDate, 'yyyy-mm-dd');
Return v_dateRecord;
End Fn_GetDateList;
采用游标方式返回数据集的读取方法
Declare
dateRecord Pkg_Stm_Date.recordType; --定义ref cursor型变量
dateValue Varcahr2(20);
Begin
--调用函数,获得记录集
dateRecord := Pkg_Stm_Date.Fn_GetDateList('2013-03-01','2013-06-01');
--fetch结果并显示
Fetch dateRecord Into dateValue;
while dateRecord % Found loop
dbms_output.put_line(dateValue);
fetch dateRecord into dateValue;
End Loop;
End;
通过在oracle包中定义一个返回连续日期的数据集函数。实现原理如下:
从oracle 9i 开始,提供了一个叫做“管道化表函数”的概念,来解决这个问题。这种类型的函数,必须返回一个集合类型,且标明 pipelined。这个oracle函数不能返回具体变量,必须以一个空 return 返回。这个oracle函数中,通过 pipe row () 语句来送出要返回的表中的每一行。调用这个oracle函数的时候,通过 table() 关键字把管道流仿真为一个数据集。
第一步:创建表类型
create or replace type DateRecord as table of varchar2(8000)
第二部:在包中定义函数
--获取连续的日期列表,返回结果集
Function Fn_GetDateTable(P_StartDate varchar2, P_EndDate varchar2) return DateRecord pipelined;
第三部:在包体中定义函数实体
--返回日期列表,以表数据方式显示可以进行表关联
Function Fn_GetDateTable(P_StartDate Varchar2, P_EndDate Varchar2) RETURN DateRecord pipelined
Is
Begin
for dateRow in
(
select TO_DATE(P_StartDate, 'yyyy-mm-dd') + NUMTODSINTERVAL(level, 'day') thisDate
from dual
Connect By Level <= To_Date(P_EndDate,'yyyy-mm-dd') - To_Date(P_StartDate, 'yyyy-mm-dd')
) loop
PIPE ROW(dateRow.thisDate);
end loop;
return;
End Fn_GetDateTable;
第四部:调用方法
select column_value
from table(Pkg_Stm_Date.Fn_GetDateTable('2013-03-01','2013-06-01'));
oracle声明数据包格式
create or replace package PKG_TCH_COURSE_Init is
-- Author : ADMINISTRATOR
-- Created : 2013-6-17 16:50:19
-- Purpose : 定义数据包功能描述
/*声明存储过程*/
PROCEDURE SP_TCH_CourseTable_Init(
schoolId IN NUMBER DEFAULT 0,
gradeId IN NUMBER DEFAULT 0,
classId IN NUMBER DEFAULT 0 ,
queryDate IN VARCHAR DEFAULT '',
courseType IN NUMBER DEFAULT 0
);
end PKG_TCH_COURSE_Init;