您的位置:首页 > 数据库 > Oracle

oracle存储过程、函数库

2013-06-09 10:16 127 查看
--获取当前日期函数

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: