Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1693655
  • 博文数量: 136
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3261
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-22 11:26
文章分类

全部博文(136)

文章存档

2010年(1)

2009年(26)

2008年(109)

我的朋友

分类: Oracle

2008-06-05 16:10:13

在前面的例子中,我们用这样的办法获取到一个 LOB 指针:
 
--Insert a new row using EMPTY_CLOB() to create a LOB locator
INSERT INTO waterfalls (falls_name,falls_directions)
   VALUES ('Munising Falls',EMPTY_CLOB());
 
然后用 SELECT 再从表中获取到这个 LOB 指针并赋予变量。这种方法看起来很笨,我更愿意用非常简单的方法获取到 LOB 指针,比如这样:
 
directions := EMPTY_CLOB();
 
我们用先前那种笨办法获取 LOB 指针,是有原因的。我们已经知道一个 LOB 变量保存的是 LOB 指针,它指向数据库中实际存储的 LOB 数据(注意是数据库中存储的 LOB 数据,而不是内存中)。LOB 数据存储在磁盘上的一个或多个数据文件中。而且,LOB 列中的数据的物理信息(比如存储在哪里,是如何存储的),是作为其所在的表的定义的一部分的。
 
当我们调用系统函数 EMPTY_CLOB( ),我们得到了一个 empty LOB 指针,它不指向磁盘中的任何位置,然后我们要将这个 empty LOB 指针存储到表列中。当我们将得到的 empty LOB 指针插入表 waterfalls 中时,Oracle 发现这是一个空指针,会根据表 waterfall 定义中的存储信息来决定 LOB 数据的存储位置,并将该 LOB 指针指向该位置,然后将这个新 LOB 指针保存在表中。此时,我们才能使用这个 LOB 指针,当然,为了获得这个新的 LOB 指针,我们需要再一次从表中查询它出来。
 
系统函数 EMPTY_CLOB( ) 是可以赋值给 CLOB 变量的,所以原来的那条插入语句,也可以这样写:
 
--Insert a new row using EMPTY_CLOB() to create a LOB locator
directions := EMPTY_CLOB();
INSERT INTO waterfalls (falls_name,falls_directions)
  VALUES ('Munising Falls',directions);
 
以上为了说明 LOB 的原理,我们将 LOB 插入表中,再从表中获取 LOB 指针。其实从 Oracle8i 开始,可以不这样做,可以使用 temporary LOBs(后面我们会介绍)。
 
注意系统函数 DBMS_BLOB( ) 返回一个空的 BLOB 指针,DBMS_CLOB( ) 返回一个空的 CLOB/NCLOB 指针。)
阅读(1422) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~