Oracle函式的確定性

zhenghaishu發表於2014-08-06
Oracle函式的確定性

(1) 概念
函式的確定性就是輸入相同的一個引數,返回的結果總是相同的。函式的確定性,在於可以根據函式名和引數來快取執行結果。Oracle在第二次輸入該引數時,會直接拿第一次的結果,不再重複執行該函式,從而提高效率。

(2) 應用場景
對於scott使用者emp表中的員工薪資,如果薪資高於或等於2000,返回1;如果薪資低於2000,返回0。

(3) 函式編寫
create or replace function get_sal_grade(salary number) return number deterministic as
begin
  declare grade number;
  begin
    grade := salary - 2000;
    if grade < 0 then
      return 0;
    end if;
      return 1;
  end;
end get_sal_grade;
/

上述函式的第一行中加入deterministic關鍵字,表明所建立的函式具有確定性。

(4) 函式呼叫
SMITH的工資為800,得到的結果應為0。
declare salary number;
begin
  salary := 800;
  dbms_output.put_line('SMITH''s salary grade is ' || get_sal_grade(salary));
end;
/

執行結果:
SMITH's salary grade is 0
PL/SQL procedure successfully completed.


KING的工資為5000,得到的結果應為1。
declare salary number;
begin
  salary := 5000;
  dbms_output.put_line('SMITH''s salary grade is ' || get_sal_grade(salary));
end;
/

執行結果:
SMITH's salary grade is 1
PL/SQL procedure successfully completed.


(5) 函式的不確定性
比如查表的記錄數,就屬於函式的不確定性。因為表的記錄數會隨著記錄的插入或刪除而發生改變。

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

相關文章