知识大全 关于oracle中大对象处理的一些方法和实例
Posted 知
篇首语:读书不要贪多,而是要多加思索,这样的读书使我获益不少。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 关于oracle中大对象处理的一些方法和实例相关的知识,希望对你有一定的参考价值。
在oracle中 有 个大对象(lobs)类型可用 分别是blob clob bfile nclob 下面是对lob数据类型的简单介绍 l blob:二进制lob 为二进制数据 最长可达 GB 存贮在数据库中 l clob:字符lob 字符数据 最长可以达到 GB 存贮在数据库中 l bfile:二进制文件;存贮在数据库之外的只读型二进制数据 最大长度由操作系统限制 l 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 = bytesleft If bytes > ChunkSize Then bytes = ChunkSize ReDim tmp( To bytes) As Byte Get fnum tmp fld AppendChunk tmp bytesleft = b cha138/Article/program/Oracle/201311/16861相关参考
js可以利用dom非常轻松的就可以遍历一个表格当然只要是dom中有的所有对象都可以通过js来访问和处理 复制代码代码如下:cha138/Article/program/Java/J
Oracle中几个关于日期方面的SQL实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! №:取
下面的是关于sql*loader的使用的一点总结有些是来自itpub上的一些网友的总结 大部分是oracle专家高级编程上的实例只是我实践以后写的结果 sqlldruserid=lgo
前言 当然在触发器修改自身数据表对于有ORACLE数据库后台编程人员来说并不应该算是一个难题可能在平时的工作中就经常要遇到 但对于刚刚使用ORACLE数据库后台编程人员来说的确是一个比较烦人的
实例讲解Oracle9i数据坏块的处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 笔者在一台
可能大家也都习惯了spring和hibernate对CLOB字段的处理在spring中配置c
浅谈Oracle中大数据量表的管理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 简介 随着信
本文将围绕c#静态方法和实例方法讨论一下针对一些观点如静态方法是常驻内存还有静态方法比实例方法先装载做一个辨析同时讨论下何时用静态方法何时用实例方法 前几日在微软的好友发给我一个链接《静态方法和
Oracle11gR1中大小写敏感的密码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 密码大小
Oracle实例和Oracle数据库详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一ORA