热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

oracle自定义函数索引陷阱

oracle自定义函数索引陷阱来自《剑破冰山——ORACLE开发艺术》的结论:使用函数索引一定要注意在修改函数代码后重建函数索引,否则,Oracle将使用这个函数索引查询出错误结果且不提示任何错误,这是非常为限度地...SyntaxHighlighter.

oracle自定义函数索引陷阱
 
来自《剑破冰山——ORACLE开发艺术》的结论:
 
使用函数索引一定要注意在修改函数代码后重建函数索引,否则,Oracle将使用这个函数索引查询出错误结果且不提示任何错误,这是非常为限度地。
  www.2cto.com  
以下为验证:
[sql] 
--构造表数据  
[sql] 
DROP TABLE t;  
CREATE TABLE t(x NUMBER,y VARCHAR2(30));  
INSERT INTO t SELECT ROWNUM,ROWNUM||&#39;a&#39; FROM dual CONNECT BY ROWNUM<100;  
 
[sql] 
--建函数  
CREATE OR REPLACE FUNCTION f_sing(p_value in VARCHAR2)RETURN VARCHAR2   
deterministic IS     www.2cto.com  
BEGIN   
  RETURN p_value;  
 
END;  
[sql] 
--建函数索引,并查询结果  
CREATE INDEX idx_f_sing_y ON t(f_sing(y));  
ANALYZE TABLE t compute STATISTICS FOR TABLE FOR ALL indexes FOR ALL indexed COLUMNS;  
SELECT * FROM t WHERE f_sing(y)=&#39;8a&#39;;  
X Y  
8 8a  
 
[sql] 
--修改函数代码  
CREATE OR REPLACE FUNCTION f_sing(p_value in VARCHAR2)RETURN VARCHAR2   
deterministic IS   
BEGIN  www.2cto.com  
  RETURN p_value||&#39;b&#39;;  
END;  
[sql] 
--重新查询结果,提示函数索引被禁用——书中的结论是修改函数代码后仍查到8 8a,此点与原书不符,版本问题?  
SELECT * FROM t WHERE f_sing(y)=&#39;8a&#39;;  
20 1 ORA-30554: 基于函数的索引TWGERP.IDX_F_SING_Y被禁用  
 
[sql] 
--使用hints禁用索引后,查不到资料,正确。  
SELECT /*+no_index(t)*/ * FROM t WHERE f_sing(y)=&#39;8a&#39;;  
X Y
[sql]
--重建索引后查询结果,查不到资料,正确。  
DROP INDEX idx_f_sing_y;  
CREATE INDEX idx_f_sing_y ON t(f_sing(y));  
SELECT * FROM t WHERE f_sing(y)=&#39;8a&#39;;  
X Y
 

推荐阅读
  • Pikachu平台SQL注入漏洞详解
    本文详细介绍了SQL注入漏洞的基本原理、攻击流程、不同类型注入点的识别与利用方法,以及基于union联合查询、报错信息、布尔盲注、时间盲注等多种技术手段的信息获取方式。同时,探讨了如何通过SQL注入获取操作系统权限,以及HTTP Header注入和宽字节注入等高级技巧。最后,提供了使用SQLMap自动化工具进行漏洞测试的方法和常见的SQL注入防御措施。 ... [详细]
  • SQL Server中查询表结构与视图的方法,便捷高效
    本文介绍如何在SQL Server中轻松查询表结构和视图,提供简洁高效的SQL语句,特别适用于开发人员。 ... [详细]
  • 使用Python模拟登录教务系统抓取成绩并分析存储
    本文详细介绍如何使用Python编程语言模拟登录学校教务系统,抓取学生的成绩信息,并进行数据分析和可视化处理,最终将数据存储到MySQL数据库中。 ... [详细]
  • 本文详细介绍了如何解决在使用本地SQlyog客户端尝试连接阿里云上的MariaDB数据库时遇到的2003错误,即无法连接到MySQL服务器的问题。 ... [详细]
  • Hibernate入门指南:单表数据库操作详解
    本文介绍了Hibernate作为全面的ORM框架的基础知识,并详细讲解了在MyEclipse环境中配置Hibernate以及进行基本的数据库单表操作的方法,包括增删改查等常见操作。 ... [详细]
  • 本文探讨了如何利用 Application 对象在 PHP 应用程序中共享数据,特别是在多用户环境中保持数据的一致性和安全性。文章还介绍了 Application 对象的基本结构、方法和事件,并提供了实际应用示例。 ... [详细]
  • 大数据SQL优化:全面解析数据倾斜解决方案
    本文深入探讨了大数据SQL优化中的数据倾斜问题,提供了多种解决策略和实际案例,旨在帮助读者理解和应对这一常见挑战。 ... [详细]
  • 本文探讨了一种有效的方法来检查数据库中是否已存在特定的用户名,如果不存在,则将其添加到数据库中。代码示例展示了如何使用SQL查询和C#编程实现这一功能。 ... [详细]
  • 解决MySQL Administrator 登录失败问题
    本文提供了解决在使用MySQL Administrator时遇到的登录错误的方法,包括启动变量和服务部分禁用的问题。同时,文章还介绍了通过安全配置模式来解决问题的具体步骤。 ... [详细]
  • Oracle中打开10046Trace的各种方法10046trace的跟踪等级10046是一个Oracle的内部事件(event),通过设置这个事件可以得到Oracl ... [详细]
  • 远程访问用户 Kindle通过电子书实现控制
    介绍自2007年以来,亚马逊已售出数千万台Kindle,令人印象深刻。但这也意味着数以千万计的人可能会因为这些Kindle中的软件漏洞而被黑客入侵。他 ... [详细]
  • Python安全实践:Web安全与SQL注入防御
    本文旨在介绍Web安全的基础知识,特别是如何使用Python和相关工具来识别和防止SQL注入攻击。通过实际案例分析,帮助读者理解SQL注入的危害,并掌握有效的防御策略。 ... [详细]
  • Linux环境下的PHP7安装与配置指南
    本文详细介绍了如何在Linux操作系统中安装和配置PHP7,包括检查当前PHP版本、升级PHP以及配置MySQL支持等步骤,适合后端开发者参考。 ... [详细]
  • 本文探讨了在Linux系统中尝试访问远程MySQL数据库时遇到的权限拒绝错误,特别是当使用非root用户进行连接时出现的'Access denied for user'错误。 ... [详细]
  • 本文讨论了在处理分页数据时常见的低级错误,并提供了优化后的代码示例,以减少重复代码并提高可读性和维护性。 ... [详细]
author-avatar
爷们疯子2_593_278
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有