文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

小编给大家分享一下在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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯