程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> ODAC應用技巧(二)使用BLOB及CLOB數據類型

ODAC應用技巧(二)使用BLOB及CLOB數據類型

編輯:Oracle數據庫基礎

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 數據。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved