新聞中心
小編給大家分享一下在Oracle10g中如何使用包DBMS_ADVANCED_REWRITE實(shí)現(xiàn)新的查詢重寫功能,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
天津ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
從Oracle10g版本1開始,提供了新的包DBMS_ADVANCED_REWRITE來(lái)實(shí)現(xiàn)查詢重寫。它允許你截獲特定的SQL語(yǔ)句,并將
其重定義為另一個(gè)SQL語(yǔ)句。下面是一個(gè)簡(jiǎn)單的例子:
1、確認(rèn)測(cè)試用戶有必要的權(quán)限去運(yùn)行
CONN sys/password AS SYSDBA
GRANT EXECUTE ON DBMS_ADVANCED_REWRITE TO test;
GRANT CREATE MATERIALIZED VIEW TO test;
[@more@]
2、創(chuàng)建測(cè)試用表
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、查詢測(cè)試表
SELECT * FROM rewrite_test_tab;
ID DESCRIPTION
---------- --------------------------------------------------
1 GLASGOW
2 BIRMINGHAM
3 LONDON
3 rows selected.
SQL>
4、創(chuàng)建要替換成的SQL使用的視圖,然后將上面的語(yǔ)句重定義為查詢這個(gè)視圖
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、初始化參數(shù)QUERY_REWRITE_INTEGRITY缺省值為"enforced",意味只有原始語(yǔ)句的輸出和替換后語(yǔ)句的輸出完全
一致才會(huì)進(jìn)行重寫替換。而我們要實(shí)現(xiàn)替換后的輸出跟原始輸出是有差別的,所以需要將這個(gè)參數(shù)的值修改為
"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中有這些重定義查詢的相關(guān)信息
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>
看完了這篇文章,相信你對(duì)“在Oracle10g中如何使用包DBMS_ADVANCED_REWRITE實(shí)現(xiàn)新的查詢重寫功能”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
文章名稱:在Oracle10g中如何使用包DBMS_ADVANCED_REWRITE實(shí)現(xiàn)新的查詢重寫功能
鏈接URL:http://www.ef60e0e.cn/article/jdjopp.html