- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
函数索引的使用细节——自定义函数的索引化
函数索引的使用细节——自定义函数的索引化
函数索引使用细节——自定义函数的索引化
个人分类:Oracle管理
在笔者之前的Blog中,已经多次对函数索引Functional Index进行介绍。其中包括函数索引的原理、使用和应用场景。针对两个使用细节,补充一下其他知识内容。
函数索引可以解决一些由于SQL书写和数据库设计带来的优化问题。我们通常使用的也是一些Oracle预定义的函数功能,那么我们是否可以对自定义函数也加函数索引呢?
首先还是对环境的准备:
SQL desc t
Name Type Nullable Default Comments
-------------- ------------- -------- ------- --------
OWNER VARCHAR2(30) Y
OBJECT_NAME VARCHAR2(128) Y
SUBOBJECT_NAME VARCHAR2(30) Y
OBJECT_ID NUMBER Y
(篇幅原因,有省略…)
此时,我们建立一个简单的自定义函数f_define_nc。
SQL create or replace function f_define_nc
2 (inpstr in varchar2)
3 return varchar2 is
4 Result varchar2(10);
5 begin
6 Result := substr(inpstr,1,5);
7 return(Result);
8 end f_define_nc;
9 /
Function created
对数据表T的列object_name加函数索引处理。
SQL create index idx_t_fobjname on t(f_define_nc(object_name));
create index idx_t_fobjname on t(f_define_nc(object_name))
ORA-30553:函数不能确定
检查30553错误信息。
[oracle@bspdev ~]$ oerr ora 30553
30553, 00000, The function is not deterministic
// *Cause: The function on which the index is defined is not deterministic
// *Action: If the function is deterministic, mark it DETERMINISTIC. If it
// is not deterministic (it depends on package state, database state,
// current time, or anything other than the function inputs) then
// do not create the index. The values returned by a deterministic
// function should not change even when the function is rewritten or
// recompiled.
简单的说,Oracle不允许对所谓“非确定性的函数”建立函数索引。那么,什么是非确定性函数呢?
一个函数,无论有无参数,对相同的输入函数都能获得相同的输出,我们称之为确定性“Deterministic”函数。否则是非确定性函数。例如substr函数,就是一个确定性函数。sysdate就是一个非确定性函数。
要对一个自定义函数建立函数索引,要保证该函数是一个确定性函数,就需要使用deterministic进行标注才行。
SQL create or replace function f_define_nc
2 (inpstr in varchar2)
3 return varchar2
4 DETERMINISTIC
5 is
6 Result varchar2(10);
7 begin
8 Result := substr(inps
您可能关注的文档
- 克里夫·阿斯内斯:量化天才重振雄风.doc
- 免疫算法C代码.doc
- 免费公共DNS域名解析服务器.doc
- 免费增值先搭台再唱戏.doc
- 免费推广方式汇总.doc
- 免费电脑硬件.doc
- 免费论文80.doc
- 免费论文116.doc
- 免费论文34.doc
- 免费计算机技术文档下载-玩透弹出窗口.doc
- 中考语文复习专题二整本书阅读课件.ppt
- 中考语文复习积累与运用课件.ppt
- 2025年初中学业水平考试模拟试题(二)课件.ppt
- 四川省2015届理科综合试题48套第12套.pdf
- 【课件】战争与和平—美术作品反映战争+课件-2024-2025学年高中美术湘美版(2019)美术鉴赏.pptx
- 【课件】青春牢筑国家安全防线 课件 2024-2025学年高中树立总体国家安全观主题班会.pptx
- 【课件】原始人的创造+课件高中美术湘美版(2019)美术鉴赏.pptx
- 上海证券-美容护理行业周报:流量加快去中心化,强运营头部品牌影响较小 -2024-.pdf
- T_CSEIA 1005—2023_能源工业互联网平台数据治理要求.pdf
- T_CDSA 504.16-2023_急流救援技术培训与考核要求.pdf
文档评论(0)