oracle存储过程、函数库
- --获取当前日期函数
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;
wala-wo