Oracle中的DETERMINISTIC
Posted ljbguanli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle中的DETERMINISTIC相关的知识,希望对你有一定的参考价值。
多次看到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行。
以上是关于Oracle中的DETERMINISTIC的主要内容,如果未能解决你的问题,请参考以下文章