ODAC 应用技巧 (二)使用 BLOB 及 CLOB 数据类型

王朝other·作者佚名  2006-01-08
宽屏版  字体: |||超大  

使用 BLOB 及 CLOB 数据类型

nxyc_twz@163.com

ODAC 组件支持 Oracle 8 的 BLOB 和 CLOB 数据类型。你可以使用 TOraQuery 组件来获取 LOB 字段的值,使用同样的方法,你也可以获取 LONG 或 LONG ROW 字段。 当你需要使用 SQL DML 及 PL/SQL 语句存取这些字段时,你就会发现 LOB 数据类型的用法有明显的不同。

BLOB 和 CLOB 数据类型通过 LOB 定位器(指定数据地址) 存储在表列中;实际的 BLOB 和 CLOB 数据存储在独立的表空间中。与之不同的是,LONG 或 LONG RAW 类型存储在数据库中,表中存放着它们的实际值。

当存取 LOB 列时,返回的是定位器,而不像 LONG 或 LONG RAW 数据类型那样返回它的实际值。

例如,分析这个表的定义:

CREATE TABLE ClobTable (

Id NUMBER,

Name VARCHAR2(30),

Value CLOB

)

如果我们不通过值参数初始化 LOB 定位器, Oracle 将不允许使用下面的语句来更新数据表:

UPDATE ClobTable

SET

Name = :Name,

Value = :Value

WHERE

Id = :Id

要初始化 LOB 定位器,你必须使用 EMPTY_BLOB 或 EMPTY_CLOB Oracle 函数。要返回初始化后的定位器,应在同样的语句中使用 RETURNING 子句。例如:

UPDATE ClobTable

SET

Name = :Name,

Value = EMPTY_CLOB()

WHERE

Id = :Id

RETURNING

Value

INTO

:Value

ODAC 写 LOB 数据到 Oracle 且返回初始值字段,需使用:值参数。

存储过程允许自动初始化 LOB 值,方法如下:

CREATE OR REPLACE

PROCEDURE ClobTableUpdate (p_Id NUMBER, p_Name VARCHAR2,

p_Value OUT CLOB)

is

begin

UPDATE ClobTable

SET

Name = p_Name,

Value = EMPTY_CLOB()

WHERE

Id = p_Id

RETURNING

Value

INTO

p_Value;

end;

注意:值参数被声明为 OUT。同时,设置 LOB 数据类型的参数的 ParamType 属性为 ptInput ,且指定它到所需的数据前来实际调用存储过程。我们可以这样调用前面声明的存储过程:

OraStroredProc1.StoredProcName := 'ClobTableUpdate';

OraStroredProc1.Prepare;

OraStroredProc1.ParamByName('p_Id').AsInteger := Id;

OraStroredProc1.ParamByName('p_Name').AsString := Name;

OraStroredProc1.ParamByName('Value').ParamType := ptInput;

OraStroredProc1.ParamByName('Value').AsCLOBLocator.

LoadFromFile(FileName);

OraStroredProc1.Execute;

对 ODAC 来说,在 LOB 操作中使用 ParamType 属性是非常重要的。如果 ParamType 是 ptInput , ODAC 写数据到服务器,如果 ParamType 是 ptOutput,它则读取数据。

你可以使用 LOB 参数的 dtBlob 和 dtMemo 数据类型来编写普通的 DML 语句。在这种情况下, Oracle 自动将 LONG 和 LONG ROW 类型的值转换为 CLOB 或 BLOB 数据。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有