談笑有鴻儒,往來無白丁

          在恰當的時間、地點以恰當的方式表達給恰當的人...  閱讀的時候請注意分類,佛曰我日里面是談笑文章,其他是各個分類的文章,積極的熱情投入到寫博的隊伍中來,支持blogjava做大做強!向dudu站長致敬>> > 我的微博敬請收聽

          使用 BLOB 及 CLOB 數據類型

          轉:http://blog.csdn.net/nxyc_twz/archive/2004/06/16/16061.aspx
          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 數據。

          http://support.microsoft.com/kb/322796/en-us

          posted on 2007-08-18 15:07 壞男孩 閱讀(3036) 評論(0)  編輯  收藏 所屬分類: ORACLE篇章DELPHI
          主站蜘蛛池模板: 孝义市| 乌拉特后旗| 图片| 商南县| 新民市| 诏安县| 江安县| 即墨市| 四平市| 垣曲县| 宽甸| 罗定市| 樟树市| 金塔县| 咸丰县| 突泉县| 民勤县| 西华县| 巴林左旗| 乳山市| 镇雄县| 永胜县| 英吉沙县| 勃利县| 荣成市| 兴文县| 武鸣县| 遵义市| 遂溪县| 连平县| 团风县| 电白县| 广水市| 闵行区| 太仆寺旗| 武威市| 惠来县| 通辽市| 张家川| 卫辉市| 宁夏|