多次看到DETERMINISTIC,一直很疑惑,今天做了一个实验。我们欺骗Oracle说是一个DETERMINISTIC函数,它在sql中只调用一次。如果不使用DETERMINISTIC,可以看到出来的值都不一样。使用DETERMINISTIC后,不同的会话都出来一样的值。
sql> create or replace function f_t(i_p int) return number DETERMINISTIC is
i_rtn number;
begin
i_rtn := i_p * dbms_random.value(1,10);
return i_rtn;
end;
/
函数已创建。
session1:
sql> select LEVEL,f_t(1) FROM DUAL CONNECT BY LEVEL<=10;
LEVEL F_T(1)
---------- ----------
1 2.55732959
2 2.55732959
3 2.55732959
4 2.55732959
5 2.55732959
6 2.55732959
7 2.55732959
8 2.55732959
9 2.55732959
10 2.55732959
已选择10行。
session2:
sql> select LEVEL,f_t(1) FROM DUAL CONNECT BY LEVEL<=10;
LEVEL F_T(1)
---------- ----------
1 2.55732959
2 2.55732959
3 2.55732959
4 2.55732959
5 2.55732959
6 2.55732959
7 2.55732959
8 2.55732959
9 2.55732959
10 2.55732959
已选择10行。
sql> create or replace function f_t(i_p int) return number is
i_rtn number;
begin
i_rtn := i_p * dbms_random.value(1,10);
return i_rtn;
end;
/
函数已创建。
sql> select LEVEL,f_t(1) FROM DUAL CONNECT BY LEVEL<=10; LEVEL F_T(1) ---------- ---------- 1 8.48649118 2 8.9396978 3 2.2786135 4 5.29205905 5 5.32847713 6 8.70095819 7 6.20471031 8 2.00101537 9 3.53814265 10 3.64991086 已选择10行。
原文链接:https://www.f2er.com/oracle/211954.html