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

原创 2003年02月14日 21:28:00
 

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

oracle数据库的blob和clob类型,是什么意思和区别

BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的。其实两个是可以互换的的,或者可以直接用LOB字段代替这两个。但是为了更好的管理ORACLE数据库,通常像图...
  • Ideality_hunter
  • Ideality_hunter
  • 2016年10月25日 15:23
  • 2397

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

           这些天一直在试图把一个用Oracle数据库做的项目转换为用msSql2000数据库的,本以为只要把数据库的连接池改改就可以了,没想到事实并没那么简单~ 要改的地方有好多,改了几天...
  • yoyo_yaya
  • yoyo_yaya
  • 2007年01月26日 15:41
  • 22523

ORA-00932: 数据类型不一致: 应为 BLOB, CLOB, 但却获得 CHAR

今天发现逻辑备份出错:====================即将导出指定的用户.... 正在导出 pre-schema 过程对象和操作. 正在导出用户 PMPT 的外部函数库名. 导出 PUBLIC...
  • xiejunlin
  • xiejunlin
  • 2011年02月23日 22:20
  • 3188

Oracle Varchar2/Blob/Clob用法详解

数据库中提供了三种字段类型Varchar2、Blob和Clob用于存储字符串或二进制数据,其中Varchar2、Clob用于存储字符串数据,而Blob用于存储二进制数据。 Varchar2采用单字节...
  • xiaokui_wingfly
  • xiaokui_wingfly
  • 2013年12月26日 10:38
  • 1162

Oracle 中LONG RAW BLOB CLOB类型介绍

说明:RAW: LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列【不建议使用】 LONG RAW: 可变长二进制数据...
  • IndexMan
  • IndexMan
  • 2015年08月31日 09:45
  • 3698

CLOB与BLOB的区别及用途

BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的。其实两个是可以互换的的,或者可以直接用LOB字段代替这两个。但是为了更好的管理 ORACLE数据库, ...
  • qq_35776392
  • qq_35776392
  • 2017年02月15日 12:53
  • 474

Oracle中JDBC对BLOB和CLOB读取的专用处理和通用处理

设有表:create table blobimg (id int primary key, contents blob);一、BLOB入库的专用访问:    1) 最常见于Oracle的JDBC示例中...
  • iihero
  • iihero
  • 2007年02月26日 20:38
  • 8526

kettle能抽取oracle的clob字段么?

本文转自:http://www.360doc.com/content/15/0811/09/27089714_490902857.shtml 学习使用kettle,在学习的过程中遇到一些连接数据...
  • zhaoxinglin123
  • zhaoxinglin123
  • 2015年08月11日 09:49
  • 2722

Oracle中Varchar2/Blob/Clob用法详解

Oracle中Varchar2/Blob/Clob用法详解 数据库中提供了三种字段类型Varchar2、Blob和Clob用于存储字符串或二进制数据,其中Varchar2、Clob用于存储字...
  • u014232091
  • u014232091
  • 2014年04月21日 22:21
  • 2138

oracle里面的long,long raw,raw,clob,blob区别

ORACLE LOB类型提供了BFILE、BLOB、CLOB、NCLOB让我们来存储最大尺寸有4G的无结构的数据块(例如:文本、图像、声音和视频等)。并且它们右以以高效的、任意的和分段操作的方式存取数...
  • hhuck
  • hhuck
  • 2010年09月15日 09:23
  • 6090
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ODAC 应用技巧 (二)使用 BLOB 及 CLOB 数据类型
举报原因:
原因补充:

(最多只允许输入30个字)