ORACLE FUNCTION函数中DETERMINISTIC测试
发表于:2024-10-08 作者:千家信息网编辑
千家信息网最后更新 2024年10月08日,如果函数经常对于上述情况产生确定的记录,可以在函数声明中用DETERMINISTIC,这样ORACLE会自动在内存中缓存这些记录集,如果不确定,产生的结果就会不确定了1,概念及含义1,语法CREATE
千家信息网最后更新 2024年10月08日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安全错误
数据库的锁怎样保障安全
女生学人工智能还是软件开发
四川智慧团建软件开发系统
学校网络安全的利与弊
火币天下网络技术官网
数据库信息不正确
辽宁费用管理软件开发
阿云服务器怎么创立的
多ip香港服务器租赁指南
.net 数据库连接加密
湖南省做软件开发的公司
rtu与电脑数据库
数据库基础知识汇总
宝德服务器pr4764
抓好网络安全部署
网络安全 发展
网络安全法对公司等级保护建设
政府网站网络安全整改报告
服务器安全狗配置
深圳星享互联网科技有限公司
厦门一趣软件开发有限公司
橙道网络技术
京东软件开发外包
串联服务器
大连软件开发招聘日语
铁路企业网络安全风险管控
阿里云服务器设置密码
专科中计算机网络技术好吗
加入dna数据库有什么坏处
一个合格的软件开发部门经理
惠州专业服务器散热器厂家