知识大全 Oracle中大对象(lob)处理方法和实例

Posted

篇首语:人的天才只是火花,要想使它成熊熊火焰,哪就只有学习!学习。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle中大对象(lob)处理方法和实例相关的知识,希望对你有一定的参考价值。

Oracle中大对象(lob)处理方法和实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在oracle中 有 个大对象(lobs)类型可用 分别是blob clob bfile nclob     下面是对lob数据类型的简单介绍     blob:二进制lob 为二进制数据 最长可达 GB 存贮在数据库中     clob:字符lob 字符数据 最长可以达到 GB 存贮在数据库中     bfile:二进制文件;存贮在数据库之外的只读型二进制数据 最大长度由操作系统限制     nclob 支持对字节字符集合(nultibyte characterset)的一个clob列     对于如何检索和操作这些lob数据一直是oracle数据库开发者经常碰到的问题 下面我将在oracle对lob数据处理的一些方法和技巧 介绍给读者 希望能够对读者以后的开发有所帮助     oracle中可以用多种方法来检索或操作lob数据 通常的处理方法是通过dbms_lob包     其他的方法包括使用api(application programming interfaces)应用程序接口和oci(oracle call interface)oracle调用接口程序      一 在oracle开发环境中我们可以用dbms_lob包来处理!    dbms_lob包功能强大 简单应用 既可以用来读取内部的lob对象 也可以用来处理bfile对象 但处理两者之间 还有一点差别 处理内部lob对象(blob clob)时 可以进行读和写 但处理外部lob对象bfile时 只能进行读操作 写的操作可以用pl/sql处理 另外用sql也可以处理lob 但要注意sql仅可以处理整个lob 不能操作lob的数据片     在dbms_lob包中内建了read() append write() erase() copy() getlength() substr()等函数 可以很方便地操作lob对象 这里不做深入讨论 读者可以参看相关的书籍     对于pl/sql 下面介绍一种技巧 用动态的pl/sql语句处理clob对象来传替表名!    example     动态PL/SQL 对CLOB字段操作可传递表名table_name 表的唯一标志字段名field_id clob字段名field_name记录号v_id 开始处理字符的位置v_pos 传入的字符串变量v_clob    修改CLOB的PL/SQL过程 updateclob    create or replace procedure updateclob(  table_name in varchar   field_id in varchar   field_name in varchar   v_id in number   v_pos in number   v_clob in varchar )  is  lobloc clob;  c_clob varchar ( );  amt binary_integer;  pos binary_integer;  query_str varchar ( );  begin  pos:=v_pos* + ;  amt := length(v_clob);  c_clob:=v_clob;  query_str := select ||field_name|| from ||table_name|| where ||field_id|| = :id for update ;   initialize buffer with data to be inserted or updated  EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;   from pos position write varchar into lobloc  dbms_lob write(lobloc amt pos c_clob);  mit;  exception  when others then  rollback;  end;    l /用法说明     在插入或修改以前 先把其它字段插入或修改 CLOB字段设置为空empty_clob()     然后调用以上的过程插入大于 到 个字符     如果需要插入大于 个字符 编一个循环即可解决问题     查询CLOB的PL/SQL函数 getclob    create or replace function getclob(  table_name in varchar   field_id in varchar   field_name in varchar   v_id in number   v_pos in number) return varchar   is  lobloc clob;  buffer varchar ( );  amount number := ;  offset number := ;  query_str varchar ( );  begin  query_str := select ||field_name|| from ||table_name|| where ||field_id|| = :id ;   initialize buffer with data to be found  EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;  offset:=offset+(v_pos )* ;   read varchar from the buffer  dbms_lob read(lobloc amount offset buffer);  return buffer;  exception  when no_data_found then  return buffer;  end;    l 用法说明     用select getclob(table_name field_id field_name v_id v_pos) as partstr from dual;    可以从CLOB字段中取 个字符到partstr中     编一个循环可以把partstr组合成dbms_lob getlength(field_name)长度的目标字符串      二 对于在其他不同的开发环境 例如vc vb pb java等环境下对lob的处理 处理方法不尽相同 在这里将简要举几个例子来说明不在oracle开发环境下对lob的处理     (一) 在pb中的处理    exampler   string ls_path ls_filename ls_jhdh  long ll_num ll_count rtn  blob ole_blob  ll_num=dw_lb getrow()  if ll_num> then ls_jhdh=dw_lb object ct_njhdh[ll_num]  select count(*) into :ll_count from sj_jh_jhfjb where ct_jhdlxbh= and ct_jhdh=:ls_jhdh and ct_jdlxbh=:is_jdlx;  if ll_count> then  rtn=messagebox( 提示 是否要修改此附件 question! yesno! )  if rtn= then  SELECTBLOB ct_jhfjnr INTO le_blob from sj_jh_jhfjb where ct_jhdlxbh= and ct_jhdh=:ls_jhdh and ct_jdlxbh=:is_jdlx;  ole_ objectdata =ole_blob  If ole_ activate(offsite!) <> Then  Messagebox( OLE Activate 不能激活 )  Return   end If  end if  else  messagebox( 提示 没有附件 )  end if  end if    (二)在vb中的处理    在vb中处理大对象 一般可以用OO O(oracle objects for ole)来处理大对象 这里介绍一种不用 处理大对象blob的方法     下面这段程序可以将一个文件(文本文件 doc文件 图象文件等)保存到数据库中 并可以将其从数据库读出    需要两个mandbutton    cmd 名称 cmdsave caption 保存    cmd 名称 cmdread caption 读取    一个cmddialog控件    同时需要创建一张表t_demo(字段id 类型 number ;字段text 类型 blob;)    exmple   Option Explicit  Dim rn As ADODB Connection  Public Function CreateDataSource(DataSource As String UserID As String Password As String) As Boolean  On Error GoTo DbConErr:  Set rn = New ADODB Connection  With rn   ConnectionString = Provider=OraOledb Oracle ; & _   password= & Password & ; & _   User ID = & UserID & ; & _   Data Source= & DataSource & ; & _   Locale Identifier=    Open  End With  CreateDataSource = True  Exit Function  DbConErr:  CreateDataSource = False  End Function    Private Sub cmdRead_Click()  Dim rs As New ADODB Recordset  rs ActiveConnection = rn  rs LockType = adLockOptimistic  rs CursorLocation = adUseClient  rs Source = select * from t_demo   rs Open  ComDlgDir DialogTitle = 保存文件   ComDlgDir Filter = * *   ComDlgDir ShowSave  Call BlobToFile(rs Fields( text ) ComDlgDir filename)  Set rs = Nothing  Exit Sub  Set rs = Nothing  End Sub    Private Sub cmdsave_Click()  Dim rs As New ADODB Recordset  rs ActiveConnection = rn  rs LockType = adLockOptimistic  rs CursorLocation = adUseClient  rs Source = select * from t_demo   rs Open  rs AddNew  ComDlgDir DialogTitle = 选取文件   ComDlgDir ShowOpen  rs Fields( id ) Value =   If ComDlgDir filename <> Then  Call FileToBlob(rs Fields( text ) ComDlgDir filename)  rs Update  End If  Set rs = Nothing  Exit Sub  Set rs = Nothing  End Sub    Private Sub Form_Load()  If Not CreateDataSource( sid systemp manager ) Then  MsgBox Connection failure!   End If  End Sub    fld As ADODB Field filename As String Optional ChunkSize As Long = )  Dim fnum As Integer bytesleft As Long bytes As Long  Dim tmp() As Byte  If (fld Attributes And adFldLong) = Then  Err Raise field doesn t support the GetChunk method   End If  If Dir$(filename) = Then Err Raise File not found   fnum = FreeFile  Open filename For Binary As fnum  bytesleft = LOF(fnum)  Do While bytesleft  bytes = bytesle cha138/Article/program/Oracle/201311/17733

相关参考

知识大全 JDBC存取ORACLE大型数据对象LOB几种情况的示范类

JDBC存取ORACLE大型数据对象LOB几种情况的示范类  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 SQL入门:大对象 (LOB)

SQL入门:大对象(LOB)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  大对象(LOB)  

知识大全 用PHP操纵Oracle的LOB类型的数据

用PHP操纵Oracle的LOB类型的数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!《PHP+

知识大全 实例讲解Oracle9i数据坏块的处理

实例讲解Oracle9i数据坏块的处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  笔者在一台

知识大全 jdbc方式读取oracle的clob字段实例

         可能大家也都习惯了spring和hibernate对CLOB字段的处理在spring中配置c

知识大全 浅谈Oracle中大数据量表的管理

浅谈Oracle中大数据量表的管理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  简介  随着信

知识大全 Oracle11gR1中大小写敏感的密码

Oracle11gR1中大小写敏感的密码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  密码大小

知识大全 Oracle实例和Oracle数据库详解

Oracle实例和Oracle数据库详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一ORA

知识大全 Oracle中的Char与Varchar的区别和实例

Oracle中的Char与Varchar的区别和实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 Oracle 数据对象分析

Oracle数据对象分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  过程和函数    过程和