閱讀183 返回首頁    go 技術社區[雲棲]


oracle中的函數使用

一函數的基本應用

 

1 創建函數(SQL窗口中)

create or replace function get_hello_msg
return varchar2 as
begin
       return 'hello world';
end get_hello_msg;

函數必須有返回值,該函數的返回值是varchar2類型。

 

2 在數據字典查看函數信息(SQL窗口)

select object_name,object_type,status from user_objects where lower(object_name) = 'get_hello_msg'

注意看status這一欄,若顯示VALID說明該函數可用;若顯示INVALID則說明該函數不合法。

不可用的原因可能是語法錯誤,比如在創建函數時少了分號,記住每一個end後麵都要有分號。

 

3 查看函數返回值(Command窗口)

set serverout on;
declare msg varchar2(20);
begin
 msg:=get_hello_msg;
 dbms_output.put_line(msg);
end;
/

其中set serverout on語句表示在窗口中顯示服務器輸出信息。

 


二帶參數的函數


1 創建函數(SQL窗口)

create or replace function get_stu_grade(stu_grade number) return number as
begin
       declare standard_grade number;
       begin
               standard_grade:=stu_grade - 60;
               if standard_grade < 0 then
                  return 0;
               end if;
               return 1;
       end;
end get_stu_grade;


2 調用函數(Command窗口或SQL窗口)

select get_stu_grade(90) from dual; // 1
select get_stu_grade(60) from dual; // 1
select get_stu_grade(59) from dual; // 0

 

 

三函數的確定性

create or replace function get_stu_grade(stu_grade number) return number
deterministic as
begin
       declare standard_grade number;
       begin
               standard_grade:=stu_grade - 60;
               if standard_grade <=0 then
                  return 0;
               end if;
               return 1;
       end;
end get_stu_grade;

 

deterministic增加了函數的確定性。意思就是我們輸入相同的一個分數,其返回的結果應該一致。如果第一次輸入了一個90分,第二次再輸入90分的時候返回值肯定與第一次一樣,那麼oracle就會直接拿到第一次的結果,不再重複執行該函數,提高的效率。什麼時候不能用該關鍵字呢?比如該函數使用了係統時間而係統時間影響了返回值。那麼每一次執行係統時間理論上是不一樣的,所以不能直接拿上次的結果。

最後更新:2017-04-03 05:40:24

  上一篇:go java對象序列化的概念和實現
  下一篇:go Java中路徑的獲取總結以及URL和URI的區別