我的编程空间,编程开发者的网络收藏夹
学习永远不晚

在Oracle10g中如何使用包DBMS_ADVANCED_REWRITE实现新的查询重写功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

在Oracle10g中如何使用包DBMS_ADVANCED_REWRITE实现新的查询重写功能

小编给大家分享一下在Oracle10g中如何使用包DBMS_ADVANCED_REWRITE实现新的查询重写功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

从Oracle10g版本1开始,提供了新的包DBMS_ADVANCED_REWRITE来实现查询重写。它允许你截获特定的SQL语句,并将
其重定义为另一个SQL语句。下面是一个简单的例子:

1、确认测试用户有必要的权限去运行

CONN sys/password AS SYSDBA
 
 GRANT EXECUTE ON DBMS_ADVANCED_REWRITE TO test;
 GRANT CREATE MATERIALIZED VIEW TO test;

[@more@]

2、创建测试用表

CONN test/test
 
 DROP TABLE rewrite_test_tab;
 
 CREATE TABLE rewrite_test_tab (
   id           NUMBER,
   description  VARCHAR2(50),
   CONSTRAINT rewrite_test_tab_pk PRIMARY KEY (id)
 );
 
 INSERT INTO rewrite_test_tab (id, description) VALUES (1, 'GLASGOW');
 INSERT INTO rewrite_test_tab (id, description) VALUES (2, 'BIRMINGHAM');
 INSERT INTO rewrite_test_tab (id, description) VALUES (3, 'LONDON');
 COMMIT;
 
 EXEC DBMS_STATS.gather_table_stats(USER, 'rewrite_test_tab');

3、查询测试表

SELECT * FROM rewrite_test_tab;
 
         ID DESCRIPTION
 ---------- --------------------------------------------------
          1 GLASGOW
          2 BIRMINGHAM
          3 LONDON
 
 3 rows selected.
 
 SQL>

4、创建要替换成的SQL使用的视图,然后将上面的语句重定义为查询这个视图

CREATE OR REPLACE VIEW rewrite_test_tab_v AS
 SELECT id,
        INITCAP(description) AS description
 FROM   rewrite_test_tab
 ORDER BY description;
 
 BEGIN
   SYS.DBMS_ADVANCED_REWRITE.declare_rewrite_equivalence (
      name             => 'test_rewrite',
      source_stmt      => 'SELECT * FROM rewrite_test_tab',
      destination_stmt => 'SELECT * FROM rewrite_test_tab_v',
      validate         => FALSE,
      rewrite_mode     => 'TEXT_MATCH');
 END;
 /

5、初始化参数QUERY_REWRITE_INTEGRITY缺省值为"enforced",意味只有原始语句的输出和替换后语句的输出完全
  一致才会进行重写替换。而我们要实现替换后的输出跟原始输出是有差别的,所以需要将这个参数的值修改为
  "TRUSTED"才行。

ALTER SESSION SET QUERY_REWRITE_INTEGRITY = TRUSTED;
 
 Session altered.
 
 SELECT * FROM rewrite_test_tab;
 
         ID DESCRIPTION
 ---------- --------------------------------------------------
          2 Birmingham
          1 Glasgow
          3 London
 
 3 rows selected.
 
 SQL>

6、视图[USER|ALL|DBA]_REWRITE_EQUIVALENCES中有这些重定义查询的相关信息

SELECT * FROM user_rewrite_equivalences;
 
 OWNER                          NAME
 ------------------------------ ------------------------------
 SOURCE_STMT
 --------------------------------------------------------------------------------
 DESTINATION_STMT                                                                 REWRITE_MO
 -------------------------------------------------------------------------------- ----------
 TEST                           TEST_REWRITE
 SELECT * FROM rewrite_test_tab
 SELECT * FROM rewrite_test_tab_v                                                 TEXT_MATCH
 
 
 1 row selected.
 
 SQL>


看完了这篇文章,相信你对“在Oracle10g中如何使用包DBMS_ADVANCED_REWRITE实现新的查询重写功能”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

在Oracle10g中如何使用包DBMS_ADVANCED_REWRITE实现新的查询重写功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用MongoDB实现数据的聚合查询功能

如何使用MongoDB实现数据的聚合查询功能MongoDB是一种流行的NoSQL数据库,它以其灵活性和高性能而备受青睐。在应用程序中,数据聚合是一项常见的任务,这是将数据集合中的多个文档组合在一起,并根据特定条件进行计算的过程。在本文中,我
2023-10-22

如何在springboot中使用mybatis-plus实现一个多表分页查询功能

这篇文章将为大家详细讲解有关如何在springboot中使用mybatis-plus实现一个多表分页查询功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.新建一个springboot工程
2023-06-07

如何在MongoDB中实现数据的地理位置查询功能

如何在MongoDB中实现数据的地理位置查询功能摘要:在现代数据驱动的应用程序中,地理位置查询功能变得越来越重要。本文将介绍如何在MongoDB中实现地理位置查询功能,并提供具体的代码示例。介绍:MongoDB是一个全功能的非关系型数据库,
2023-10-22

如何在MongoDB中实现数据的时序存储和查询功能

如何在MongoDB中实现数据的时序存储和查询功能当今的数据处理领域中,时序数据的存储和查询是非常重要的需求。时序数据包括时间戳和数据值,例如温度数据、传感器数据、股票价格等。在这篇文章中,我们将介绍如何利用MongoDB数据库来实现时序数
2023-10-22

如何在MongoDB中实现数据的索引和查询优化功能

如何在MongoDB中实现数据的索引和查询优化功能近年来,随着大数据的兴起,数据存储和查询变得越来越复杂。对于数据量较大的应用来说,索引和查询优化就成了至关重要的任务。MongoDB是一种非关系型数据库,由于其面向文档的特点,使得其在处理海
2023-10-22

在java中使用dom4j包如何实现一个解析XML功能

这篇文章将为大家详细讲解有关在java中使用dom4j包如何实现一个解析XML功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。具体如下:xml文件内容如下:2023-05-31

如何在MySQL中使用PHP实现数据的增删改查功能

如何在MySQL中使用PHP实现数据的增删改查功能概要MySQL是一种开源的关系型数据库管理系统,而PHP是一种流行的服务器端脚本语言。结合使用MySQL和PHP,我们可以轻松实现数据库的增删改查功能。本文将向您介绍如何在MySQL中使用P
2023-10-22

如何使用PHP实现微信小程序的公交查询功能?

如何使用PHP实现微信小程序的公交查询功能?随着智能手机的普及,微信小程序成为了一种非常流行的应用形式。微信小程序可以在微信中直接使用,无需下载安装,使用方便,功能丰富。在微信小程序的开发中,公交查询功能是非常常见的需求。本文将介绍如何使用
2023-10-27

如何使用PHP实现微信小程序的任务查询功能?

如何使用PHP实现微信小程序的任务查询功能?随着微信小程序的普及和应用范围的不断扩大,许多企业和个人都开始在小程序上开发自己的业务功能。其中,任务查询功能在很多场景中都非常常见,比如企业内部任务管理、教育机构的学生作业管理等等。本文将详细介
如何使用PHP实现微信小程序的任务查询功能?
2023-10-28

java项目中使用datatables如何实现一个带条件查询功能

这篇文章给大家介绍java项目中使用datatables如何实现一个带条件查询功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用datatables自带后台查询 前台代码:
2023-05-31

如何在Android项目中使用RecyclerView实现上拉或下拉刷新功能

这篇文章给大家介绍如何在Android项目中使用RecyclerView实现上拉或下拉刷新功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首页布局:activity_notice
2023-05-31

如何使用MySQL和Java实现一个简单的地理位置查询功能

如何使用MySQL和Java实现一个简单的地理位置查询功能概述:地理位置查询功能可以让用户根据指定的经纬度查找附近的地点或者查询特定地点的经纬度信息。在本文中,我们将讨论如何使用MySQL和Java实现一个简单的地理位置查询功能,并提供具体
2023-10-22

如何使用MySQL和Ruby实现一个简单的数据查询分析功能

要使用MySQL和Ruby实现一个简单的数据查询分析功能,首先需要确保已经安装了MySQL数据库和Ruby编程语言。下面是一个简单的步骤指南:1. 安装MySQL数据库:可以从MySQL官方网站下载并安装MySQL数据库。2. 安装Ruby
2023-10-10

Android开发中如何使用touch实现移动端的下拉刷新功能

今天就跟大家聊聊有关Android开发中如何使用touch实现移动端的下拉刷新功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。第一部分:四个touch事件  1.touchstar
2023-05-31

编程热搜

目录