CREATE OR REPLACE FUNCTION F_GET_BZGS(I_NY VARCHAR2)
RETURN NUMBER AS
V_SQL_BZGS VARCHAR2(2000);
V_KSRQ DATE := ADD_MONTHS(TO_DATE(I_NY || '-21', 'yyyy-mm-dd'), -1);
V_JSRQ DATE := TO_DATE(I_NY || '-20', 'yyyy-mm-dd');
V_BZGS NUMBER;
BEGIN
V_SQL_BZGS := 'select
nvl(sum(working_hours),0) working_hours
from C_COMPANY_HOLIDAYS_INFO t
where t.day_type = ''工作日''
and t.working_hours > 0
AND t.day_date>=to_char(:V_KSRQ,''yyyy-mm-dd'')
AND t.day_date<=to_char(:V_JSRQ,''yyyy-mm-dd'')';
BEGIN
EXECUTE IMMEDIATE V_SQL_BZGS
INTO V_BZGS
USING V_KSRQ, V_JSRQ;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_BZGS := 0;
END;
RETURN V_BZGS;
END;
1、創建函數的語句塊
CREATE OR REPLACE FUNCTION F_GET_BZGS(I_NY VARCHAR2)
RETURN NUMBER AS
–在這定義參數
begin
這裏寫代碼塊
end;
2、I_NY 爲函數的參數,定義爲VARCHAR2類型,函數可以無參,也可以多個參數,視具體情況而定。
3、RETURN NUMBER–說明這個函數的返回值類型是NUMBER,
當然函數的返回值類型也可以其他,還可以是table
3.1 如果要返回table類型
create or replace type TYPE_table1_RESUL as object
(
sid varchar2(50)
)
create or replace type TYPE_table1_RESUL_TABLE as table of TYPE_table1_RESUL
先定義一個table類型的對象。
這樣我們就可以在定義函數的時候 return TYPE_table1_RESUL_TABLE
返回定義的table類型,在定義變量的時候要申明
v_table1 TYPE_table1_RESUL_TABLE :=TYPE_table1_RESUL_TABLE();
v_sid varchar2(50);
最後將要返回的數據,循環插入到TYPE_table1_RESUL中
v_table1.extend();
v_table1( v_table1.count) :=TYPE_table1_RESUL v_sid);
return v_table1;