本文参考:http://blog.youkuaiyun.com/gavinloo/article/details/6830524
在原文基础上做部分改动。
一、目标库中创建临时表
创建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秒;
由此可见,第三种方案耗时最少,效率最高。