oracle函式初次嘗試

賀子_DBA時代發表於2016-11-23
        初次著手寫function,確實費了好長時間,一個if就需要有個end  if ,並且else必須和if一起使用,可以直接對傳進來的引數使用oracle自帶的函式進行處理,並直接做做判斷條件。
需求根據如下java程式碼,建立一個函式來實現相同的功能:
public static int processCompanyName(String company_name){
        String pre_log_n = pre_log+"processCompanyName(String company_name)";
        System.out.println( pre_log_n+"::company_name="+company_name );
        if( company_name==null )
            return 99;
        if( "".equals(company_name.trim()) )
            return 99;
        if( company_name.startsWith("[體驗]") )
            return 2;
        else if( company_name.startsWith("[微信]") )
            return 3;
        else if( company_name.startsWith("[體驗移動") )
            return 4;
        else if( company_name.startsWith("[採招圈") )
            return 5;
        else if( company_name.startsWith("[cn]") )
            return 6;
        else if( company_name.startsWith("[快速]") )
            return 7;
        else if( company_name.startsWith("[風向標") )
            return 8;
        else
            return 1;
    }
透過上面程式碼可知,需要透過判斷company_name(可以理解為一個引數)開頭的幾個字,來輸出特定的阿拉伯數字。


首先oracle函式的建立語句格式:


CREATE OR REPLACE FUNCTION 函式名 
RETURN 返回值型別 
IS 
    宣告部分; 
BEGIN 
    函式體; 
  RETURN 變數; 
END;


下面展示我寫的案例:
形式1:宣告一個引數(category_2),然後把傳進來的數值(category)賦給該引數,然後透過判斷引數category_2,來得到結果。
create or replace function get_source_id1
( category    in varchar2)
return  number
is
category_2   VARCHAR2(50);


category_source    number(10);
begin
category_2:=category;


if  substr(category_2,1,4)='[採招圈' then
category_source:=5;
END IF;
if substr(category_2,1,4)='[風向標' then
category_source:=8;
END IF;
if substr(category_2,1,5)='[體驗移動' then
category_source:=4;
END IF;
if substr(category_2,1,4)='[cn]' then
category_source:=6;
END IF;
if substr(category_2,1,4)='[體驗]' then
category_source:=2;
END IF;
if substr(category_2,1,4)='[微信]' then
category_source:=3;
END IF;
if substr(category_2,1,4)='[快速]' then
category_source:=7;
END IF;
if category_2 is null then 
category_source:=99;
END IF;
if substr(category_2,1,4) not in ('[快速]','[微信]','[體驗]','[cn]','[風向標','[採招圈') and substr(category_2,1,5)!='[體驗移動' 
then 
category_source:=1;
END IF;
RETURN category_source;
end ;




形式2:直接判斷傳進來的引數。
create or replace function get_source_id
( category    in varchar2)
return  number
is
category_source    number(10);
begin


if  substr(category,1,4)='[採招圈' then
category_source:=5;
END IF;
if substr(category,1,4)='[風向標' then
category_source:=8;
END IF;
if substr(category,1,5)='[體驗移動' then
category_source:=4;
END IF;
if substr(category,1,4)='[cn]' then
category_source:=6;
END IF;
if substr(category,1,4)='[體驗]' then
category_source:=2;
END IF;
if substr(category,1,4)='[微信]' then
category_source:=3;
END IF;
if substr(category,1,4)='[快速]' then
category_source:=7;
END IF;
if category is null then
category_source:=99;
END IF;
if substr(category,1,4) not in ('[快速]','[微信]','[體驗]','[cn]','[風向標','[採招圈') and substr(category,1,5)!='[體驗移動'
then
category_source:=1;
END IF;
RETURN category_source;
end ;


形式3:也可以定義兩個引數,用來接收傳進來的引數,透過判斷這兩個引數,來得到結果。
create or replace function get_source_id
( category    in varchar2)
return  number
is
category_5   VARCHAR2(50);
category_4   VARCHAR2(50);
category_source    number(10);
begin
category_5:=substr(category,1,5);
category_4:=substr(category,1,4);
if category_4='[採招圈' then
category_source:=5;
END IF;
if category_4='[風向標' then
category_source:=8;
END IF;
if category is null then
category_source:=99;
end if ;
if category_4='[cn]' then
category_source:=6;
END IF;
if category_4='[體驗]' then
category_source:=2;
END IF;
if category_4='[微信]' then
category_source:=3;
END IF;
if category_4='[快速]' then
category_source:=7;
end if;
if category_5='[體驗移動' then
category_source:=4;
end if;
if category_4 not in ('[快速]','[微信]','[體驗]','[cn]','[風向標','[採招圈') and category_5 !='[體驗移動]'then
category_source:=1;
end if;
return category_source;
end;




對於oracle 函式的初次體會:
1.在我的例子中category這個是定義個輸入值,它是一個一個去傳進來的。
2.oracle 函式區別去儲存過程,前者必須有一個返回值,儲存過程非必需。
3.oracle函式中沒出現一個if,就需要有個end if和他匹配。
4.對於無參函式的定義和呼叫都沒有圓括號,但無參儲存過程需要,例如我的category    in varchar2   ,而不是category    in varchar2(10)。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2128954/,如需轉載,請註明出處,否則將追究法律責任。

相關文章