使用 BLOB 及 CLOB 數(shù)據(jù)類型
轉(zhuǎn):http://blog.csdn.net/nxyc_twz/archive/2004/06/16/16061.aspx
ODAC 組件支持 Oracle 8 的 BLOB 和 CLOB 數(shù)據(jù)類型。你可以使用 TOraQuery 組件來(lái)獲取 LOB 字段的值,使用同樣的方法,你也可以獲取? LONG 或 LONG ROW 字段。 當(dāng)你需要使用 SQL DML 及 PL/SQL 語(yǔ)句存取這些字段時(shí),你就會(huì)發(fā)現(xiàn) LOB 數(shù)據(jù)類型的用法有明顯的不同。
BLOB 和 CLOB 數(shù)據(jù)類型通過(guò) LOB 定位器(指定數(shù)據(jù)地址) 存儲(chǔ)在表列中;實(shí)際的 BLOB 和 CLOB 數(shù)據(jù)存儲(chǔ)在獨(dú)立的表空間中。與之不同的是,LONG 或 LONG RAW 類型存儲(chǔ)在數(shù)據(jù)庫(kù)中,表中存放著它們的實(shí)際值。
當(dāng)存取 LOB 列時(shí),返回的是定位器,而不像 LONG 或 LONG RAW 數(shù)據(jù)類型那樣返回它的實(shí)際值。
例如,分析這個(gè)表的定義:
CREATE TABLE ClobTable (
Id NUMBER,
Name VARCHAR2(30),
Value CLOB
)
如果我們不通過(guò)值參數(shù)初始化 LOB 定位器, Oracle 將不允許使用下面的語(yǔ)句來(lái)更新數(shù)據(jù)表:
UPDATE ClobTable
SET
Name = :Name,
Value = :Value
WHERE
Id = :Id
要初始化 LOB 定位器,你必須使用 EMPTY_BLOB 或 EMPTY_CLOB Oracle 函數(shù)。要返回初始化后的定位器,應(yīng)在同樣的語(yǔ)句中使用 RETURNING 子句。例如:
UPDATE ClobTable
SET
Name = :Name,
Value = EMPTY_CLOB()
WHERE
Id = :Id
RETURNING
Value
INTO
:Value
ODAC 寫 LOB 數(shù)據(jù)到 Oracle 且返回初始值字段,需使用:值參數(shù)。
存儲(chǔ)過(guò)程允許自動(dòng)初始化 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;
注意:值參數(shù)被聲明為 OUT。同時(shí),設(shè)置 LOB 數(shù)據(jù)類型的參數(shù)的 ParamType 屬性為 ptInput ,且指定它到所需的數(shù)據(jù)前來(lái)實(shí)際調(diào)用存儲(chǔ)過(guò)程。我們可以這樣調(diào)用前面聲明的存儲(chǔ)過(guò)程:
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;
對(duì) ODAC 來(lái)說(shuō),在 LOB 操作中使用 ParamType 屬性是非常重要的。如果 ParamType 是 ptInput , ODAC 寫數(shù)據(jù)到服務(wù)器,如果 ParamType 是 ptOutput,它則讀取數(shù)據(jù)。
你可以使用 LOB 參數(shù)的 dtBlob 和 dtMemo 數(shù)據(jù)類型來(lái)編寫普通的 DML 語(yǔ)句。在這種情況下, Oracle 自動(dòng)將 LONG 和 LONG ROW 類型的值轉(zhuǎn)換為 CLOB 或 BLOB 數(shù)據(jù)。
http://support.microsoft.com/kb/322796/en-us
posted on 2007-08-18 15:07
壞男孩 閱讀(3034)
評(píng)論(0) 編輯 收藏 所屬分類:
ORACLE篇章 、
DELPHI