确定性函数(Deterministic)

确定性函数用关键词Deterministic标识,表示函数的返回值完全由输入参数决定。

确定性函数有以下用处:

1.可以在基于函数的索引中使用该函数;

2.可以在物化视图中调用;

3.Oracle11g开始会对其参数及其返回结果进行缓存处理以提升性能。

但是,是不是一个确定性函数是需要用户来负责的,就是说对函数进行编译的时候不会检查出这个函数是否是确定性的。来看个例子:

确定性函数(Deterministic)_第1张图片

这个函数返回当前输入时间+1天,只要输入时间是确定的,返回结果也是确定的,因此是一个确定性函数。

确定性函数(Deterministic)_第2张图片

用这个函数做索引是完全没有问题。再看另外一个函数:

确定性函数(Deterministic)_第3张图片

这个函数会去ALL_OBJECTS表里取一个最大LAST_DDL_TIME值出来,由于ALL_OBJECTS视图是动态变化的,因此同一个输入参数不可能每次都得到一样的结果,这个函数显然是不确定性的,但是编译没有报错!

确定性函数(Deterministic)_第4张图片

不仅没有报错,而且还可以做函数索引,也能查出数据。但是,50条数据建索引耗费9秒时间不是很正常。

确定性函数(Deterministic)_第5张图片

检查执行计划,确实是用到了这个索引,然而实际上这个索引是毫无意义的,因为索引值会发生变化

确定性函数(Deterministic)_第6张图片


总结一下:一个非确定性函数也可以声明成确定性函数,但是没有实用价值。

你可能感兴趣的:(PLSQL开发,PL/SQL开发)