本文参考:http://blog.csdn.net/daxiang12092205/article/details/19751305
在原文基础上做部分改动。
一、目标库中创建临时表
创建test_clob_link:
创建临时表并抽取数据:
- --创建dblink
- -- Drop existing database link
- drop database link TEST_CLOB_LINK;
- -- Create database link
- create database link TEST_CLOB_LINK
- connect to admin identified by admin
- using '(DESCRIPTION =
- (ADDRESS_LIST =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.1.1)(PORT = 1521))
- )
- (CONNECT_DATA = (SERVICE_NAME = orcl)
- )
- )';
- Create global temporary table temp_my_history on commit preserve rows
- as select * from my_history@test_clob_link;
- select count(1) from temp_my_history t;
二、目标库中创建实体表
在目标库中创建my_history表;
抽取源库中的数据插入到目标库中:
- Insert into my_history select * from my_history@test_clob_link;
- select count(1) from my_history t;
三、目标库中创建视图
将clob类型转换为varchar2类型,截取长度4000(根据实际库中字段最大长度确定)。
- --change_result为clob类型
- create or replace view v_my_history as
- select p.history_id,p.history_name,
- dbms_lob.substr(CHANGE_RESULT,4000,1) change_result
- from my_history p;
- select count(1) from v_my_history@test_clob_link;
四、三种方案测试结果
我在公司的测试库中进行测试,测试结果如下:
第一种方案:耗时11分30秒;
第二种方案:耗时11分27秒;
第三种方案:耗时1.062秒;
由此可见,第三种方案耗时最少,效率最高。