oracle 中的大对象数据类型blob、clob、nclob的意义以及区别

本文探讨了从Oracle数据库迁移至SQL Server 2000过程中遇到的具体问题,特别是CLOB数据类型的处理差异及解决方案。分享了如何理解和适配不同数据库间的大对象类型,包括BLOB和CLOB的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           这些天一直在试图把一个用Oracle数据库做的项目转换为用msSql2000数据库的,本以为只要把数据库的连接池改改就可以了,没想到事实并没那么简单~ 要改的地方有好多,改了几天,也学了几天,今天又学到一个:在我的程序中有这样的SQL语句:

sql = "insert into tab_publish_template(id, name, language, content, filename, editor, editime, priority, remark) "
          
+ " values(" + myId + ","
          
+ "'" + Common.toSql(myName) + "',"
          
+ "'" + Common.toSql(myLanguage) + "'," 
          
+ "empty_clob(),"
          
+ "'N/A',"
          
+ "'" + Common.toSql(myEditor) + "',"
          
+ "SYSDATE,"
          
+ myPriority + ","
          
+ mySqlRemark
          
+ ")";
stmt.executeUpdate(sql);
//处理CLOB型数据  --- oracle 数据库
      sql = "select content from tab_publish_template where id=" + myId + " for update";
      rs 
= stmt.executeQuery(sql); 
      
if (rs.next()) 
      

            
//oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("content");
            String clob = rs.getString("content");
            clob.putString(
1, myContent);
            sql 
= "update tab_publish_template set content=? where id=" + myId;
            PreparedStatement pstmt 
= conn.prepareStatement(sql);
            pstmt.setClob(
1, clob);
            pstmt.executeUpdate();
            pstmt.close();
      }

      rs.close();
      rs 
= null;

没有看懂 empty_clob() 这个是干什么的,在原来的oracle 数据库脚本中找到content 字段的类型是 clob  型的,只看脚本,我只能理解是这个字段重要放很多,很长的数据,要足够大,于是就想在sql2000 中找到同样的字段类型,但是很不幸:没得~    于是就搜了一大堆资料出来~ 最后也看个一知半解得了吧~  贴上来,给需要的朋友一起讨论:(采用)

一、请问clob   和blob是什么意思?

答:1,他们都是oracle数据库中的大对象数据类型,oracle提供专门的包对其操作。

        2,blob、clob、nclob   三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft   Word文档,以及音频、视频等非文本文件,最大长度是4GB。  

        LOB有几种类型,取决于你使用的字节的类型,Oracle   8i实实在在地将这些数据存储在数据库内部保存。  
  可以执行读取、存储、写入等特殊操作  
   
       CLOB(Character   Large   Object)    用于存储对应于数据库定义的字符集的字符数据。(类似于long类型)  
   
        BLOB(Binary   Large   Object)   可用来存储无结构的二进制数据。(类似于row和long   row)

二、请问LOB的BLOB、CLOB、BFILE有什麽区别,都用在什麽情况?怎样操作?

答:

BLOB   ——内部二进制大对象。   
CLOB  ——内部字符大对象。   
NCLOB   ——内部定长多字节字符大对象。   
BFILE   ——外部二进制文件。      
  LOB  由两部分组成:数据(值)和指向数据的指针(定位器)。尽管值与表自身一起存储,但是一个LOB 列并不包含值,仅有它的定位指针。更进一步,为了使用大对象,程序必须声 明定位器类型的本地变量。你将在本章后面见到P   L   /   S   Q   L   接口使用定位器如同操作系统的文件 处理一样。当LOB(除了BFILE  )被创建时,定位器被存放在列中,值被存放在LOB 段中,  LOB  段是在数据库内部表的一部分。当BFILE  被创建时,定位器如同平常一样存储在列中

三、blob和clob最大是多少?还是没有最大限制?

答:它们的最大上限就是4G,   Clob可以存储单字节字符数据,Blob可以存储无结构的二进制数据

[附加]  不想另开一篇了,就加在这里了,一个关于SQL2000的问题

sql2000中某字段长度不够为何会填上空格?

答:sql2000中char型是固定长度的,如固定长度为10,但是只录入了3个字符,那么剩下7位就要补充空格来填满。如果,你不想让他自动补充空格,可以选用varchar型,这个是实际长度,也很好用,速度也快,PS:oracle中如果可以用varchar2的地方就不要用clob ,因为后者的速度确实不怎么好。

        以上是今天工作的收获~  不大,但是可以积少成多。

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值