知识大全 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) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 大对象(LOB)
用PHP操纵Oracle的LOB类型的数据 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!《PHP+
实例讲解Oracle9i数据坏块的处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 笔者在一台
可能大家也都习惯了spring和hibernate对CLOB字段的处理在spring中配置c
浅谈Oracle中大数据量表的管理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 简介 随着信
Oracle11gR1中大小写敏感的密码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 密码大小
Oracle实例和Oracle数据库详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一ORA
知识大全 Oracle中的Char与Varchar的区别和实例
Oracle中的Char与Varchar的区别和实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Oracle数据对象分析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 过程和函数 过程和