DBLink 中,对于普通字段按常规方法查询即可,但是对于 CLOB 字段的处理相对比较麻烦, CLOB 为大字段,通常 VARCHAR 最大只支持到 4000 字符。在按常规方法查询时会有以下结果:
SELECT MODE_CODE,TRANSFORM_CHANGE_CONTENT from TABLE@ DBLINK ,其中 “TRANSFORM_CHANGE_CONTENT” 为 CLOB 字段,会报 “ORA-22992: cannot use LOB locators selected from remote tables” 的错误。
常规的处理方法有以下两种:
1.
采用临时表方式实现对
LOB
字段的选取:
创建一个临时表
“create global temporary table TMP_TB(
MODE_CODE VARCHAR2(16),
TRANSFORM_CHANGE_CONTENT CLOB
)on commit delete rows;”
,
再执行
“INSERT INTO TMP_TB SELECT MODE_CODE,TRANSFORM_CHANGE_CONTENT from TABLE@ DBLINK;”
后,临时表中就将对应的数据选取过来了,最后再通过执行
“SELECT * from TMP_TB;”
,即可查看到结构。
2.
采用将
CLOB
转换为
VARCHAR
的方式实现:
首先需要用到函数
“dbms_lob.substr( clob_column, for_how_many_bytes, from_which_byte );”
通过创建如下视图:
CREATE OR REPLACE VIEW DBLINK_V AS
SELECT MODE_CODE, dbms_lob.substr(TRANSFORM_CHANGE_CONTENT,4000,1) TRANSFORM_CHANGE_CONTENT
FROM TABLE
通过执行
“SELECT MODE_CODE,TRANSFORM_CHANGE_CONTENT from DBLINK_V @DBLINK;”
,即可实现查看到结果
结论,方法 1 中也可以使用普通表,但使用的临时表效率要高于普通表,这里不做过多讨论;方法 2 中创建视图的效率要远高于方法 1 ,时间上看方法 1 大于方法 2 的几倍左右。
注:本文是多年前留存的,忘记是哪转载或者测试的了,如有侵权请联系我删除。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26964624/viewspace-2564405/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26964624/viewspace-2564405/
本文探讨了在DBLink中处理CLOB字段的两种常见方法:一是通过创建临时表进行数据选取;二是将CLOB转换为VARCHAR以实现查询。对比了两者的效率,指出创建视图的方法在时间上更优。

被折叠的 条评论
为什么被折叠?



