ORACLE FUNCTION函数中DETERMINISTIC测试
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,如果函数经常对于上述情况产生确定的记录,可以在函数声明中用DETERMINISTIC,这样ORACLE会自动在内存中缓存这些记录集,如果不确定,产生的结果就会不确定了1,概念及含义1,语法CREATE
千家信息网最后更新 2025年12月03日ORACLE FUNCTION函数中DETERMINISTIC测试如果函数经常对于上述情况产生确定的记录,可以在
函数声明中用DETERMINISTIC,这样ORACLE会自动在内存中缓存这些记录集,如果不确定,
产生的结果就会不确定了
1,概念及含义
1,语法
CREATE OR REPLACE FUNCTION SCHEMA.FUNTION_NAME
(ARGUMENT IN NOC0PY DATATYPE)
RETURN DATETYPE
DETERMINISTIC
IS
BEGIN
END;
2,指定DETERMINISTIC用于,对于调用多次同一参数相同值的过程,返回相同的结果时
3,如果你在基于函数的索引相关的表达式或者对REFRESH FAST及ENABLE QUERY REWRITE的物化视图相关的查询
,必须要指定DETERMINISTIC关键字。
4,如果以后变更了上述表达式的定义,必须手工重建物化视图或者基于函数的索引
5,如果一个函数使用包变量,或者访问数据库的方能会影响函数的结果集,则不要用DETERMINISTIC
6,使用DETERMINISTIC语句的语义规则,此处皆指是定义或声明而非使用
1,可以在最顶级的子程序中,指包中
2,可以在包规范即包级的子程序中,但不能在包体中;指包的子程序声明中
3,不能在一个私有子程序中(子程序:另一个子程序内部或一个包体内部),即包体或另一个子程序中的子程序
4,一个有DETERMINISTIC的子程序能调用另一个子程序,
不管被调用的子程序是否声明DETERMINISTIC
2,示例
1,CREATE OR REPLACE FUNCTION text_length(a CLOB)
RETURN NUMBER DETERMINISTIC IS
BEGIN
RETURN DBMS_LOB.GETLENGTH(a);
END; 2,自己编写的示例
1,SQL> desc t_deterministic;
名称 是否为空? 类型
----------------------------------------- -------- -----------------------
A CHAR(2)
SQL> select * from t_deterministic;
A
--
12
ab
2, create or replace function func_deterministic(a_len t_deterministic.a%type 2 return number deterministic is
3 v_len number;
4 begin
5 select length(a) into v_len from t_deterministic where a=a_len;
6 return v_len;
7* end;
SQL> /
函数已创建。
3,SQL> select func_deterministic('ab') from t_deterministic;--查询是NULL
FUNC_DETERMINISTIC('AB')
------------------------
SQL> select func_deterministic('12') from t_deterministic;--查询有结果
FUNC_DETERMINISTIC('12')
------------------------
12
3,加与不加它的区别
4,哪些语句可以有DETERMINISTIC,此处指FUNCTION,PACKAGE,PACKAGE BODY,PROCEDURE,VIEW
1,create procedure过程中不能有DETERMINISTIC
2,CRREATE OR REPLACE PACKAGE的语法参考:Oracle? Database PL/SQL User's Guide and Reference
测试包规范
--经测试可在包规范中创建有DETERMINISTIC的函数声明
CREATE OR REPLACE PACKAGE PKG_DETERMINISTIC
AS
FUNCTION FUNC_TEST
RETURN NUMBER DETERMINISTIC;
END;
--续上测试,包体也可以创建有DETERMINISTIC的函数声明
CREATE OR REPLACE PACKAGE BODY PKG_DETERMINISTIC
IS
function FUNC_TEST
return number deterministic is
v_len number;
begin
select length(a) into v_len from t_deterministic;
return v_len;
end;
END PKG_DETERMINISTIC;
函数声明中用DETERMINISTIC,这样ORACLE会自动在内存中缓存这些记录集,如果不确定,
产生的结果就会不确定了
1,概念及含义
1,语法
CREATE OR REPLACE FUNCTION SCHEMA.FUNTION_NAME
(ARGUMENT IN NOC0PY DATATYPE)
RETURN DATETYPE
DETERMINISTIC
IS
BEGIN
END;
2,指定DETERMINISTIC用于,对于调用多次同一参数相同值的过程,返回相同的结果时
3,如果你在基于函数的索引相关的表达式或者对REFRESH FAST及ENABLE QUERY REWRITE的物化视图相关的查询
,必须要指定DETERMINISTIC关键字。
4,如果以后变更了上述表达式的定义,必须手工重建物化视图或者基于函数的索引
5,如果一个函数使用包变量,或者访问数据库的方能会影响函数的结果集,则不要用DETERMINISTIC
6,使用DETERMINISTIC语句的语义规则,此处皆指是定义或声明而非使用
1,可以在最顶级的子程序中,指包中
2,可以在包规范即包级的子程序中,但不能在包体中;指包的子程序声明中
3,不能在一个私有子程序中(子程序:另一个子程序内部或一个包体内部),即包体或另一个子程序中的子程序
4,一个有DETERMINISTIC的子程序能调用另一个子程序,
不管被调用的子程序是否声明DETERMINISTIC
2,示例
1,CREATE OR REPLACE FUNCTION text_length(a CLOB)
RETURN NUMBER DETERMINISTIC IS
BEGIN
RETURN DBMS_LOB.GETLENGTH(a);
END; 2,自己编写的示例
1,SQL> desc t_deterministic;
名称 是否为空? 类型
----------------------------------------- -------- -----------------------
A CHAR(2)
SQL> select * from t_deterministic;
A
--
12
ab
2, create or replace function func_deterministic(a_len t_deterministic.a%type 2 return number deterministic is
3 v_len number;
4 begin
5 select length(a) into v_len from t_deterministic where a=a_len;
6 return v_len;
7* end;
SQL> /
函数已创建。
3,SQL> select func_deterministic('ab') from t_deterministic;--查询是NULL
FUNC_DETERMINISTIC('AB')
------------------------
SQL> select func_deterministic('12') from t_deterministic;--查询有结果
FUNC_DETERMINISTIC('12')
------------------------
12
3,加与不加它的区别
4,哪些语句可以有DETERMINISTIC,此处指FUNCTION,PACKAGE,PACKAGE BODY,PROCEDURE,VIEW
1,create procedure过程中不能有DETERMINISTIC
2,CRREATE OR REPLACE PACKAGE的语法参考:Oracle? Database PL/SQL User's Guide and Reference
测试包规范
--经测试可在包规范中创建有DETERMINISTIC的函数声明
CREATE OR REPLACE PACKAGE PKG_DETERMINISTIC
AS
FUNCTION FUNC_TEST
RETURN NUMBER DETERMINISTIC;
END;
--续上测试,包体也可以创建有DETERMINISTIC的函数声明
CREATE OR REPLACE PACKAGE BODY PKG_DETERMINISTIC
IS
function FUNC_TEST
return number deterministic is
v_len number;
begin
select length(a) into v_len from t_deterministic;
return v_len;
end;
END PKG_DETERMINISTIC;
子程序
函数
结果
测试
查询
相同
示例
索引
表达式
视图
语句
语法
过程
中用
关键
关键字
内存
参数
变量
可在
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
阿里巴巴网络安全产品
历史文献数据库建设
嘉兴嵌入式软件开发要求
廊坊服务器机柜安装工程
网络安全由我守护
mongondb备份数据库
宝安区正规网络技术诚信服务
服务器电源和普通电源通用么
c 中数据库的绑定的意义
公司网络安全有哪些条件
计算机系毕业的能测试服务器吗
数据库与数字档案的区别
徐汇区银联网络技术价格咨询
怎么往数据库里增加数据库
数据库效率低 数据丢失
大学学生网络安全心得体会
使用数据库实现登陆界面
连接至验证服务器时出现问题
有实力的软件开发公司
cisco dns服务器
2019网络安全潜力评估
我的世界阿里云服务器
深圳企派网络技术有限公司
性能检测服务器
安装三秦通提示服务器错误
网瘾是网络安全吗
java服务器通讯安全
c井数据库sq乚
万载县小黄蜂战队网络技术服务部
湖北航天安全接入服务器地址