oracle LOB 初探

XiaoYang 2000-06-09 08:43:00
小弟没日没夜地倒腾了两个星期oracle 7.3.4,8.0.5,8.0.6,8.1.5,对LOB也算是略知一二,特在此与各位共享,希望能起到个抛砖引玉的作用。
小弟要从7.3.4数据库(sun solaris,nls_language=english)的一个表中取数据,该表中有一long型的字段(纯文本),现要将其取到8.1.5(NT4+sp5,nls_language=siplified chinese)中,并且转成CLOB型。由于没有7.3.4的DBA权限,无法将其export,即使可以export也不行,因为要求是当7.3.4数据库的该表更新时,自动触发存储过程,适时写入8.1.5数据库。小弟水平有限,目前尚未成功。
1、建立database link将两台服务器相连——成功;
2、在8.1.5中执行create table 8.1.5 select * from 7.3.4或insert into 8.1.5 select * from 7.3.4或insert into 8.1.5 select to_lob(*) from 7.3.4——“非法操作long型”;
3、copy from 7.3.4 create 8.1.5 using select * from table_name——“非法的SQL语句”;
经过反复测试,不论你在8.1.5中存成什么类型(bfile,clob,blob,long,raw,etc)都无法将7.3.4的LONG直接取过来。
4、通过编存储过程:long(utl_raw.cast_to_varchar2)——>varchar2(dbms_lob.writeappend)——>clob——结果全是乱码,为什么?
5、通过BFILE转换:bfile(dbms_lob.loadfromfile)——>clob——结果全是乱码,为什么?bfile(dbms_lob.read)——>raw(utl_raw.cast_to_varchar2)——>varchar2(dbms_lob.writeappend)——>clob——结果正确,只可惜原系统没有电子文档,无法采用bfile型;
主要原因还是无法将7.3.4的long直接转到8.1.5中,我相信只要是在同一个数据库中,无论什么转换都可以实现。

...全文
299 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
guostong 2000-10-10
  • 打赏
  • 举报
回复
用 exprot/ import 吧
不同的字符集 区别在于 dmp 文件的前4个字节
自己看着修改吧
XiaoYang 2000-06-23
  • 打赏
  • 举报
回复
我这个抛砖引玉好象是失败了。我还是自问自答吧。
我最终放弃了直接写存储过程来实现,无论怎么试都不行,最好的结果是乱码。
用PB的数据管道一倒原来的long型变成了长度只有4~7的乱码字符串,再也解不开了。
最终的解决方案:
oracle73——>PB(filewrite)——>*.doc——>word(VBA,saveas)——>*.txt——>oracle8i(bfile)——>oracle8i(dbms_lob.read)——>varchar2——>clob
XiaoYang 2000-06-11
  • 打赏
  • 举报
回复
lu_qian老兄,您能把7.3.3的long转到8.0中去?(不能使用任何工具,因为要求是适时写入)如果真可以的话,还望老哥不吝赐教。上海ORACLE的技术支持好象也无能为力。
qxm 2000-06-10
  • 打赏
  • 举报
回复
感谢你对我的问题(VB and Oracle)的回复,我的版本为oracle 7.3.3,字段为long raw,对于此种类型必须先将字段内容读到一缓冲区,再读入到8。0的clob中。varchar2是肯定不行的。long型的字段只能是255个字符。
我看你对Oracle挺有研究,我们可以探讨一下。我在南京,EMail:lu_qian@263.net

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧