在包含LONG類型的表上建立物化視圖

對於LONG類型的限制很多,不過對於高級複製來說,很多的LONG類型相關的問題都是可以解決的。 對於多主複製,包含LONG類型相對比較麻煩,需要首先修改表結構,將LONG類型轉變爲LOB類型。對於物化視圖,就相對簡單很多,不需要修改基表的數據類型。 首先,如果不需要同步LONG類型的字段,那麼不需要進行任何的修改,只有在物化視圖的創建過程中不包括LONG字段就可以了。 如果需要包含LONG字段,那麼只需要在創建物化視圖的時候對LONG類型執行TO_LOB操作,這樣就可以順利創建物化視圖。 當然,建立的物化視圖包含的是LOB字段。 具體例子如下: SQL> CREATE TABLE TEST_LONG (ID NUMBER PRIMARY KEY, LONG_COL LONG); 表已創建。 SQL> CREATE MATERIALIZED VIEW LOG ON TEST_LONG; 實體化視圖日誌已創建。 SQL> CREATE MATERIALIZED VIEW MV_TEST_LONG REFRESH FAST AS SELECT * FROM TEST_LONG; CREATE MATERIALIZED VIEW MV_TEST_LONG REFRESH FAST AS SELECT * FROM TEST_LONG *第 1 行出現錯誤: ORA-00997: 非法使用 LONG 數據類型 SQL> CREATE MATERIALIZED VIEW MV_TEST_LONG REFRESH FAST AS SELECT ID FROM TEST_LONG; 實體化視圖已創建。 SQL> DROP MATERIALIZED VIEW MV_TEST_LONG; 實體化視圖已刪除。 SQL> CREATE MATERIALIZED VIEW MV_TEST_LONG REFRESH FAST AS SELECT ID, TO_LOB(LONG_COL) LONG_COL 2 FROM TEST_LONG; 實體化視圖已創建。 SQL> INSERT INTO TEST_LONG VALUES (1, 'ABCDEFG'); 已創建 1 行。 SQL> SELECT * FROM TEST_LONG; ID LONG_COL ---------- ------------------------------------------------------------ 1 ABCDEFG SQL> COMMIT; 提交完成。 SQL> EXEC DBMS_MVIEW.REFRESH('MV_TEST_LONG') PL/SQL 過程已成功完成。 www.ixdba.net SQL> SELECT * FROM MV_TEST_LONG; ID LONG_COL ---------- ------------------------------------------------------------ 1 ABCDEFG SQL> UPDATE TEST_LONG SET LONG_COL = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' WHERE ID = 1; 已更新 1 行。 SQL> COMMIT; 提交完成。 SQL> EXEC DBMS_MVIEW.REFRESH('MV_TEST_LONG'); PL/SQL 過程已成功完成。 SQL> SELECT * FROM MV_TEST_LONG; ID LONG_COL ---------- ------------------------------------------------------------ 1 ABCDEFGHIJKLMNOPQRSTUVWXYZ

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章