1. 程式人生 > >oracle clob 儲存過程初始化與操作

oracle clob 儲存過程初始化與操作

oracle clob 儲存過程操作:遇到超過varchar(4000)長度的時候,就需要使用clob來儲存字元。

有兩種操作方式:

1、append clob填充到clob

2、write 字串填充到clob

方法為:

dbms_lob.append(
   dest_lob in out nocopy blob,
   src_lob in  blob);

dbms_lob.append(
   dest_lob in out nocopy clob character set any_cs,
   src_lob in clob character set dest_lob%charset);

dbms_lob.write(
  lob_loc in out nocopy blob,
  amount in binary_integer,
  offset in integer,
  buffer in raw);

dbms_lob.write(
  lob_loc in out nocopy clob character set any_cs,
  amount in binary_integer,
  offset in integer,
  buffer in varchar2 character set lob_loc%charset);

其中,各個引數的含義如下:
dest_lob是被源lob新增到的目標lob的定位器
src_lob是源lob的定位器
any_cs用來指定字符集。

write儲存過程
write儲存過程能夠將資料寫入大型物件中。寫的位置是從大型物件開始處的某個絕對偏移地址,資料從緩衝區引數被寫入。寫操作將覆蓋已經在大型物件偏移地址處存在的任何長度為指定的資料。如果輸入數多於在緩衝區的資料,將產生一個錯誤。如果輸入數量小於在緩衝區的資料,那麼只有緩衝區的資料位元組活字元被寫給大型物件。


apend操作簡單,過程中定義兩個clob,dbms_lob.append(dest_clob, src_clob);
write稍微麻煩:

1、

引數定義:v_dest_clob clob; v_tmp_char varchar2(4000);

2、

dbms_lob.write(v_dest_clob

, length(v_tmp_char),dbms_lob.getlength(v_dest_clob) + 1,  v_tmp_char);

寫到此處,很多人實踐的時候,回報一個錯誤。原因是:目的clob沒有被初始化。在begin第一行中初始化v_dest_clob。

程式碼為:dbms_lob.createtemporary(v_dest_clob,true);

OK.截稿。