1.Oracle 建立函數
- create [or replace] function function_name
- [(parameter_name [in | out | in out] type [,...])]
- retutn type
- is|as
- begin
- function_body;
- end;
說明:函數必須有傳回值。
or replace:如果函數已經存在,則替換現有的函數;
function_name:函數名;
parameter_name :參數名;
in | out | in out:指定參數的模式;
function_body:包含執行任務函數的SQL和PL/SQL語句。
2、函數執行個體
- create or replace function get_publicholidaytime(fromtime in Date, totime in Date, isAvailable in number) return number
- as
- --定義變數
- free_day number :=0;
- mindate Date;
- maxdate Date;
- total number :=0;
- fromdate Date := TO_DATE(to_char(fromtime,'yyyy/MM/dd'),'yyyy/MM/dd');
- todate Date := TO_DATE(to_char(totime,'yyyy/MM/dd'),'yyyy/MM/dd');
- begin
- --if語句
- if isAvailable=1 then
- --sql語句
- select min(calendar_date) ,max(calendar_date),count(calendar_date) into mindate,maxdate,total
- from T_BI_TNT_DATE
- where calendar_date between fromdate and todate
- and IS_PUBLIC_HOLIDAY=1 ;
- if mindate = fromdate then
- total := total - 1;free_day := free_day + ((mindate + 1) - fromtime);
- end if;
- if maxdate = todate then
- total := total - 1;free_day := free_day + (totime - maxdate);
- end if;
- if mindate = maxdate then
- free_day := totime - fromtime;
- else
- free_day := free_day + total;
- end if;
- end if;
- return free_day;
- end get_publicholidaytime;
3、調用函數
select get_publicholidaytime(sysdate,sysdate + 1,1) from dual;
4、刪除函數
drop function get_publicholidaytime;