现在的位置: 首页 > 综合 > 正文

在包含LONG类型的表上建立物化视图

2013年10月05日 ⁄ 综合 ⁄ 共 1437字 ⁄ 字号 评论关闭

对于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

抱歉!评论已关闭.