DBMS_LOB包用于操作大對象。

表 1. DBMS_LOB函數(shù)/存儲過程
函數(shù)/存儲過程 類型 返回類型 描述
APPEND(dest_lob IN OUT,src_lob) 存儲過程 N/A 將一個大對象附加在另外一個大對象上。
COMPARE(lob_1, lob_2 [, amount[, offset_1 [, offset_2 ]]]) 函數(shù) INTEGER 在給定的長度和偏移范圍內,對兩個大對象進行逐字節(jié)的精確比較。
CONVERTOBLOB(dest_lob IN OUT,src_clob, amount, dest_offset IN OUT, src_offset IN OUT,blob_csid, lang_context IN OUT,warning OUT) 存儲過程 N/A 將字符類型數(shù)據(jù)的大對象,轉換成二進制類型數(shù)據(jù)的大對象。
CONVERTTOCLOB(dest_lob IN OUT,src_blob, amount, dest_offset IN OUT, src_offset IN OUT,blob_csid, lang_context IN OUT,warning OUT) 存儲過程 N/A 將二進制數(shù)據(jù)的大對象轉換成字符型數(shù)據(jù)的大對象。
COPY(dest_lob IN OUT, src_lob,amount [, dest_offset [,src_offset ]]) 存儲過程 N/A 將一個大對象復制為另一個大對象。
ERASE(lob_loc IN OUT, amount IN OUT [, offset ]) 存儲過程 N/A 刪除一個大對象的部分數(shù)據(jù)。
GET_STORAGE_LIMIT(lob_loc) 函數(shù) INTEGER 大對象允許使用的最大存儲空間。
GETLENGTH(lob_loc) 函數(shù) INTEGER 獲取大對象的長度。
INSTR(lob_loc, pattern [,offset [, nth ]]) 函數(shù) INTEGER 返回在大對象中指定模式第n次出現(xiàn)時的位置。
READ(lob_loc, amount IN OUT,offset, buffer OUT) 存儲過程 N/A 從大對象中讀取部分內容。
SUBSTR(lob_loc [, amount [,offset ]]) 函數(shù) RAW,VARCHAR2 返回大對象的部分內容。
TRIM(lob_loc IN OUT, newlen) 存儲過程 N/A 將一個大對象截取到指定長度。
WRITE(lob_loc IN OUT, amount,offset, buffer) 存儲過程 N/A 將數(shù)據(jù)寫入一個大對象中。
WRITEAPPEND(lob_loc IN OUT,amount, buffer) 存儲過程 N/A 將數(shù)據(jù)添加到一個大對象的末尾。
下表列出的是在DBMS_LOB包中使用的公共變量。
表 2. DBMS_LOB公共變量
公共變量 數(shù)據(jù)類型 變量值
compress off INTEGER 0
compress_on INTEGER 1
deduplicate_off INTEGER 0
deduplicate_on INTEGER 4
default_csid INTEGER 0
default_lang_ctx INTEGER 0
encrypt_off INTEGER 0
encrypt_on INTEGER 1
file_readonly INTEGER 0
lobmaxsize INTEGER 1073741823
lob_readonly INTEGER 0
lob_readwrite INTEGER 1
no_warning INTEGER 0
opt_compress INTEGER 1
opt_deduplicate INTEGER 4
opt_encrypt INTEGER 2
warn_inconvertible_char INTEGER 1
說明 在以下章節(jié)中,如果大對象是BLOB類型,長度和偏移量是以字節(jié)為單位。如果大對象是CLOB類型,長度和偏移量是以字符為單位。

APPEND

存儲過程APPEND用于將一個大對象附加在另外一個大對象上。這兩個大對象必須屬于同一類型。
APPEND(dest_lob IN OUT { BLOB | CLOB }, src_lob { BLOB | CLOB })
表 3. 參數(shù)說明
參數(shù)名稱 描述
dest lob 目標大對象的位置。它必須和參數(shù)src_lob代表的大對象的數(shù)據(jù)類型一致。
src lob 源大對象的位置。它必須和參數(shù)dest_lob代表的大對象的數(shù)據(jù)類型一致。

COMPARE

函數(shù)COMPARE在給定的長度和偏移范圍內,對兩個大對象進行逐字節(jié)的精確比較。進行比較操作的兩個大對象必須是相同的數(shù)據(jù)類型。
status INTEGER COMPARE(lob_1 { BLOB | CLOB },
  lob_2 { BLOB | CLOB }
  [, amount INTEGER [, offset_1 INTEGER [, offset_2 INTEGER ]]])
表 4. 參數(shù)說明
參數(shù)名稱 描述
lob_1 在比較操作中第一個大對象的位置,和參數(shù)lob_2代表的大對象的數(shù)據(jù)類型必須相同。
lob_2 在比較操作中第二個大對象的位置,和參數(shù)lob_1代表的大對象的數(shù)據(jù)類型必須相同。
amount
  • 如果大對象是BLOB類型,則是對兩個大對象各自的總字節(jié)數(shù)進行比較。
  • 如果大對象是CLOB類型,則是對兩個大對象各自總的字符數(shù)進行比較。
參數(shù)的默認值是一個大對象的最大容量。
offset 1 在比較操作中,第一個大對象中的起始位置。默認值為1。
offset_2 在比較操作中,第二個大對象中的起始位置。默認值為1。
status
  • 如果在指定的長度和偏移范圍內,兩個大對象完全相等,這個參數(shù)返回0。
  • 如果在指定的長度和偏移范圍內,兩個大對象不相等,則返回非零值。
  • 如果參數(shù)amountoffset_1或者offset_2小于0,則返回空值。

CONVERTTOBLOB

存儲過程CONVERTTOBLOB用于將字符類型數(shù)據(jù)的大對象轉換成二進制類型數(shù)據(jù)的大對象。
CONVERTTOBLOB(dest_lob IN OUT BLOB, src_clob CLOB,
  amount INTEGER, dest_offset IN OUT INTEGER,
  src_offset IN OUT INTEGER, blob_csid NUMBER,
  lang_context IN OUT INTEGER, warning OUT INTEGER)
表 5. 參數(shù)說明
參數(shù)名稱 描述
dest lob 表示一個BLOB類型的大對象。
src clob 表示一個CLOB類型的大對象。
amount 表示在參數(shù)src_clob所指定的大對象中要轉換的字符數(shù)量。
dest_offset IN BLOB類型的目標大對象中字節(jié)的位置。
dest_offset OUT 寫操作完成后,在BLOB類型大對象中字節(jié)的位置。
src offset IN 轉換操作中, CLOB類型大對象開始的位置。
src_offset OUT 在轉換操作完成后,CLOB類型大對象中字符的位置。
blob csid BLOB類型大對象中的字符集ID。
langcontext IN 轉換操作中使用的語言環(huán)境。通常使用默認值0。
langcontext OUT 轉換后的語言環(huán)境。
warning
  • 如果轉換成功,則返回0。
  • 如果遇到不可轉換的字符,則返回1。

CONVERTTOCLOB

存儲過程CONVERTTOCLOB用于將二進制數(shù)據(jù)的大對象轉換成字符型數(shù)據(jù)的大對象。
CONVERTTOCLOB(dest_lob IN OUT CLOB, src_blob BLOB,
  amount INTEGER, dest_offset IN OUT INTEGER,
  src_offset IN OUT INTEGER, blob_csid NUMBER,
  lang_context IN OUT INTEGER, warning OUT INTEGER)
表 6. 參數(shù)說明
參數(shù)名稱 描述
dest lob CLOB類型大對象的位置。
src_blob BLOB類型大對象的位置。
amount 由參數(shù)src_blob指定的大對象中要進行轉換的字節(jié)數(shù)量。
dest_offset IN 在CLOB類型大對象中的位置。
dest_offset OUT 寫操作完成后在CLOB類型大對象中字符的位置。
src offset IN 進行轉換操作時BLOB類型大對象中字節(jié)的開始位置。
src_offset OUT 轉換操作完成后,在BLOB類型大對象中字節(jié)的位置。
blob csid CLOB類型大對象的字符集ID。
CLOB. langcontext IN 轉換操作時使用語言環(huán)境。通常使用默認值0。
langcontext OUT 轉換操作完成后的語言環(huán)境。
warning
  • 如果轉換成功,返回0。
  • 如果遇到不可轉換的字符,則返回1。

COPY

存儲過程COPY用于將一個大對象復制為另一個大對象。源和目標大對象必須具有相同的數(shù)據(jù)類型。
COPY(dest_lob IN OUT { BLOB | CLOB }, src_lob 
{ BLOB | CLOB },
  amount INTEGER
  [, dest_offset INTEGER [, src_offset INTEGER ]])
表 7. 參數(shù)說明
參數(shù)名稱 描述
dest lob 在大對象復制操作中目標大對象的位置。它和參數(shù)src_lob代表的大對象要具有相同的數(shù)據(jù)類型。
src lob 在大對象復制操作中的源大對象的位置。它和參數(shù)dest_lob代表大對象的數(shù)據(jù)類型必須相同。
amount 由參數(shù)src_lob指定的在大對象中拷貝的字節(jié)或字符數(shù)。
dest offset 目標大對象中的位置。寫入源大對象內容操作時的開始位置。默認值為1。
src offset 源大對象中的位置。將源大對象拷貝到目標大對象操作時的開始位置。默認值為1。

ERASE

存儲過程ERASE用于刪除一個大對象的部分數(shù)據(jù)。即分別用0字節(jié)過濾器替代BLOB類型大對象的部分內容,用空格替代CLOB類型大對象的部分內容。操作結束后大對象的實際大小不會改變。
ERASE(lob_loc IN OUT { BLOB | CLOB }, amount IN OUT INTEGER
  [, offset INTEGER ])
表 8. 參數(shù)說明
參數(shù)名稱 描述
lob loc 待刪除的大對象。
amount IN 大對象中待刪除的字節(jié)或字符數(shù)。
amount OUT 實際被清除的字節(jié)或字符數(shù)量。如果在參數(shù)amount指定的字節(jié)或字符數(shù)被清除前已經達到了大對象的末尾,那么這個值會比輸入值小。
offset 對大對象進行清除操作時開始的位置。默認值為1。

GET_STORAGE_LIMIT

函數(shù)GET_STORAGE_LIMIT返回大對象允許使用的最大存儲空間。
size INTEGER GET_STORAGE_LIMIT(lob_loc BLOB)

size INTEGER GET_STORAGE_LIMIT(lob_loc CLOB)
表 9. 參數(shù)說明
參數(shù)名稱 描述
size 在數(shù)據(jù)庫中一個大對象可允許使用的最大存儲空間。
lob loc 這個參數(shù)只是為了與Oracle兼容而提供,在實際運行中可以忽略。

GETLENGTH

函數(shù)GETLENGTH返回一個大對象的長度。
amount INTEGER GETLENGTH(lob_loc BLOB)

amount INTEGER GETLENGTH(lob_loc CLOB)
表 10. 參數(shù)說明
參數(shù)名稱 描述
lob loc 大對象名稱。
amount 大對象的長度。
  • BLOB類型大對象,以字節(jié)為單位。
  • CLOB類型大對象,以字符為單位。

INSTR

函數(shù)INSTR返回在大對象中指定模式第n次出現(xiàn)時的位置。
position INTEGER INSTR(lob_loc { BLOB | CLOB },
  pattern { RAW | VARCHAR2 } [, offset INTEGER [, nth INTEGER ]])
表 11. 參數(shù)說明
參數(shù)名稱 描述
lob loc 大對象的名稱。
pattern 以字節(jié)為單位或以字符為單位的模式,用于匹配大對象中的內容。
  • 如果lob_loc代表BLOB類型大對象,那么模式必須是RAW類型。
  • 如果lob_loc代表CLOB類型大對象,那么模式必須是VARCHAR2類型。
offset 參數(shù)lob_loc代表的大對象中搜索模式時的開始位置。第一個字節(jié)或字符是位置1。默認值為1。
nth 由給定的偏移量指定起始位置,開始搜索指定模式第n次出現(xiàn)時的位置。默認值為1。
position 在大對象中的第n次出現(xiàn)模式的位置,搜索的起始位置由參數(shù)offset指定。

READ

存儲過程READ用于從大對象中讀取部分內容,然后把這部分內容放到緩沖區(qū)中。
READ(lob_loc { BLOB | CLOB }, amount IN OUT BINARY_INTEGER,
  offset INTEGER, buffer OUT { RAW | VARCHAR2 })
表 12. 參數(shù)說明
參數(shù)名稱 描述
lob loc 進行讀操作的大對象。
amount IN 讀取的字節(jié)或字符的總數(shù)。
amount OUT 實際讀取的字節(jié)或字符的總數(shù)。如果這里沒有更多數(shù)據(jù)可供讀取,那么參數(shù)amount返回0,并且產生異常DATA_NOT_FOUND
offset 在大對象中開始進行讀操作時的位置。第一個字節(jié)或字符的位置是1。
buffer 接收大對象內容的變量。
  • 如果參數(shù)lob_loc是BLOB類型大對象,那么參數(shù)buffer必須是RAW類型。
  • 如果參數(shù)lob_loc是CLOB類型大對象,那么參數(shù)buffer則必須是VARCHAR2類型。

SUBSTR

函數(shù)SUBSTR用于返回大對象的部分內容。
data { RAW | VARCHAR2 } SUBSTR(lob_loc { BLOB | CLOB }
  [, amount INTEGER [, offset INTEGER ]])
表 13. 參數(shù)說明
參數(shù)名稱 描述
lob loc 用于指示進行讀操作的大對象。
amount 所返回的字節(jié)或字符的數(shù)量。默認值為32,767。
offset 開始返回數(shù)據(jù)時大對象中的位置。第一個字節(jié)或字符的位置是1。默認值為1。
data 用于返回部分被讀取的大對象內容。
  • 如果參數(shù)lob_loc是BLOB類型大對象,那么data必須是RAW類型。
  • 如果參數(shù)lob_loc是CLOB類型大對象,那么data必須是VARCHAR2類型。

TRIM

存儲過程TRIM用于將一個大對象截斷到指定長度。
TRIM(lob_loc IN OUT { BLOB | CLOB }, newlen INTEGER)
表 14. 參數(shù)說明
參數(shù)名稱 描述
lob loc 指示被截斷長度的大對象。
newlen 被截斷長度的大對象的字節(jié)或字符總數(shù)。

WRITE

存儲過程WRITE用于將數(shù)據(jù)寫入一個大對象中。從指定的偏移量開始,在指定長度范圍內的數(shù)據(jù)都會被緩沖區(qū)中的數(shù)據(jù)覆蓋。
WRITE(lob_loc IN OUT { BLOB | CLOB },
  amount BINARY_INTEGER,
  offset INTEGER, buffer { RAW | VARCHAR2 })
表 15. 參數(shù)說明
參數(shù)名稱 描述
lob loc 用于指示進行寫操作的大對象。
amount 在緩沖區(qū)中字節(jié)或字符的數(shù)量,這些字節(jié)或字符將被寫到大對象中。
offset 大對象中的偏移量。
buffer 用于返回部分被讀取的大對象內容。
  • 如果參數(shù)lob_loc是BLOB類型大對象,那么參數(shù)buffer必須是RAW類型。
  • 如果參數(shù)lob_loc是CLOB類型大對象,那么參數(shù)buffer必須是VARCHAR2類型。

WRITEAPPEND

存儲過程WRITEAPPEND用于將數(shù)據(jù)添加到一個大對象的末尾。
WRITEAPPEND(lob_loc IN OUT { BLOB | CLOB },
  amount BINARY_INTEGER, buffer { RAW | VARCHAR2 })
表 16. 參數(shù)說明
參數(shù)名稱 描述
lob loc 待添加數(shù)據(jù)的大對象。
amount 緩沖區(qū)中字節(jié)或字符的數(shù)量,這些字節(jié)或字符將添加到大對象的尾部。
buffer 用于返回部分被讀取的大對象內容。
  • 如果參數(shù)lob_loc是BLOB類型大對象,那么參數(shù)buffer必須是RAW類型。
  • 如果參數(shù)lob_loc是CLOB類型大對象,那么參數(shù)buffer必須是VARCHAR2類型。