分享更有价值
被信任是一种快乐

在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 PR免费主机域名IMARY 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实现新的查询重写功能”有了一定的了解,如果想了解更多相关知识,欢迎关注云技术行业资讯频道,感谢各位的阅读!

相关推荐: sqlserver如何实现查看备份日志脚本

这篇文章主要介绍了sqlserver如何实现查看备份日志脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 sqlserver 查看备份日志脚本————————-…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册