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;