当前位置:数据库 > Oracle >>

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

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 数据。

学电脑知识 尽在www.zzzyk.com 电脑知识网

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,