[原]使用Oracle BFILE 导入文件到数据库一例
2010-04-01 11:47
871 查看
最近发现新接手的网站群系统有个非主流的设计——竟然是将文章的正文内容保存在文件中!这导致数据同步和迁移带来了很大的困难,如何将文件的内容重新放进数据库成为了摆在面前的一个问题。
经过搜索,发现Oracle有一种数据类型成为BFILE,可以访问外部的文件,并提供了一系列的过程,例如:dbms_lob.LoadFromFile , dbms_lob.LoadClobFromFile 还有 dbms_lob.LoadBlobFromFile , 大概看名字的就能猜到是做什么的了吧。
使用BFILE访问文件需要首先在数据库中建立 directory ,限定访问路径,当然相应的权限也得跟上:
逻辑是这样的,通过lob_id经过变换后可知道文件的位置,然后将该文件导入到对应的clob中。
我写了个过程使用过程、游标进行此操作:
经过搜索,发现Oracle有一种数据类型成为BFILE,可以访问外部的文件,并提供了一系列的过程,例如:dbms_lob.LoadFromFile , dbms_lob.LoadClobFromFile 还有 dbms_lob.LoadBlobFromFile , 大概看名字的就能猜到是做什么的了吧。
使用BFILE访问文件需要首先在数据库中建立 directory ,限定访问路径,当然相应的权限也得跟上:
SQL> desc p_lob_text; Name Null? Type ---------------------- -------- ------------- LOB_ID NOT NULL VARCHAR2(32) KEY_INFO VARCHAR2(100) LOB_CONTENT CLOB LOB_SIZE VARCHAR2(100) LINK_TABLE VARCHAR2(100) LINK_INFO VARCHAR2(50) LINK_CATEGORY VARCHAR2(50) CREATION_TIME VARCHAR2(30) LAST_EDIT_TIME VARCHAR2(30) VERSION NUMBER(38) REMARK VARCHAR2(500) STATIC_FLAG VARCHAR2(3) DELETE_FLAG VARCHAR2(3)
逻辑是这样的,通过lob_id经过变换后可知道文件的位置,然后将该文件导入到对应的clob中。
我写了个过程使用过程、游标进行此操作:
declare l_directory varchar(200) := '__dir__'; l_bfile bfile; l_blob blob; l_lob_id varchar(100); l_path varchar(200); V_SOURCE NUMBER := 1; V_DEST NUMBER := 1; V_LANG NUMBER := 0; V_WARN NUMBER; CURSOR cur is select __id__ from __table_name__; begin open cur; loop fetch cur into l_lob_id; EXIT when cur%NOTFOUND; -- setting the path of file l_path := 'blob/adapter_blob.'||to_char(l_lob_id)||'.bin'; update __table_name__ set __blob_field__=empty_blob() where __id__=l_lob_id return content INTO l_blob; l_bfile := bfilename( l_directory,l_path); if ( dbms_lob.fileexists (l_bfile) = 1 ) then V_SOURCE := 1; V_DEST := 1; V_LANG := 0; dbms_lob.fileopen(l_bfile); if ( dbms_lob.fileisopen(l_bfile) = 1 and dbms_lob.getlength(l_bfile) >0 ) then dbms_lob.loadblobfromfile ( l_blob, l_bfile, DBMS_LOB.LOBMAXSIZE , V_DEST, V_SOURCE ); end if; dbms_lob.fileclose(l_bfile); end if; commit; end loop; end; /
相关文章推荐
- 在oracle中,使用sqlldr将文件中的数据导入到数据库
- Oracle txt文件直接使用sqldlr将数据导入到数据库表中
- Oracle 使用数据泵 expdp impdp 导入导出数据库“表空间”文件
- oracle中,使用sqlldr将文件中的数据导入到数据库
- 在oracle中,使用sqlldr将文件中的数据导入到数据库
- 在oracle中导入导出dmp数据库文件
- 使用企业管理器将txt文件的内容导入到数据库中
- Java中使用Oracle的客户端 load data和sqlldr命令执行数据导入到数据库中
- oracle中导入导出dmp数据库文件
- oracle 的一些平时常用知识积累(从创建空间、数据库备份和导入、plsql连接使用全过程)
- 在Oracle中导出、导入dmp数据库文件
- 使用toad将excel文件导入oracle
- 使用sqlldr向Oracle导入大的文本(txt)文件
- 在rails 4 中 使用 CSV 组件来 把csv文件导入到数据库
- Oracle通过数据泵网络导入另一个数据库,不生成DMP文件
- ORACLE-工作常用配置及命令记录-导入sql、unl文件、查看数据库状态、修改字符集等
- 使用php语句将数据库*.sql文件导入数据库
- 第四步 使用shell操作数据库,导入分析并将结果导出成txt文件
- SQL 数据的导入导出,对远程(MSsql,OracleAccess,)数据库的操作以及读取Excel,txt文件中的数据
- 使用pgAdmin把Excel文件导入PostgreSql数据库