oracle函數的其中一個屬性就是 deterministic。
它表示一個函數在輸入不變的情況下輸出是否確定,像oracle的內置函數 UPPER,TRUNC 等都是 deterministic 函數,而像 DBMS_RANDOM.VALUE 就不是。
寫法如下
create or replace function f1 (
p1 number
) return number deterministic
is
begin
return p1 * 2;
end;
/
在創建自定義函數索引是也需要添加 deterministic
例如
--自定義的字符反轉函數
create or replace function f_reverse(
var in varchar2
) return varchar2 deterministic
is
/**
--支持數字,字符串,中文翻轉
--最大支持字符串長度爲32767字節
**/
temp varchar2(32767);
i number(38);
begin
if var is null
then
return null;
else
i := length(var);
loop
temp := temp || substr(var, i, 1);
i := i - 1;
exit when i = 0;
end loop;
return temp;
end if;
end;
參考:
https://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_packages.htm#ADFNS384