oracle筆記1-FUNCTION 函數

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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章