ORACLE FUNCTION函数中DETERMINISTIC测试
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,如果函数经常对于上述情况产生确定的记录,可以在函数声明中用DETERMINISTIC,这样ORACLE会自动在内存中缓存这些记录集,如果不确定,产生的结果就会不确定了1,概念及含义1,语法CREATE
千家信息网最后更新 2025年02月02日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安全错误
数据库的锁怎样保障安全
软件开发网站备案备注填什么
链接服务器 别名
kangle代理服务器
乐园数据库
计算机网络技术专业环境分析
网络安全板块龙头股
软件开发和公务员
软件开发框架jade
观看网络安全专题教育心得体会
天然药物分子数据库
数据库轮询技术方案
实况足球18数据库
一个数据库可以有几个主文件
金钟科技软件开发怎么样
崇明区好的软件开发怎么样
有关网络安全的主持稿
传文件用什么网络安全
软件开发的在上海好找工作不
打开金蝶数据库
软件开发人员岗位评定
服务器未响应怎么解决
有效数据库工具
宁波嵌入式软件开发工具
登科数据库
东软医疗保险怎么导入数据库
word导入至数据库
网络安全怎么防骗
海珠区网络技术开发公司
杭州临安区学习软件开发
河北区网络技术售后保障