在前面的例子中,我们用这样的办法获取到一个 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
指针。) |
阅读(1455) | 评论(0) | 转发(0) |