Oracle Insert BLOB

How to Insert Blobdata(image, video) intooracle BLOB size

In this post it is shown how I can insert Blob data link image video into oracle database and also how I can determine the size of the BLOB data from oracle.

1)Create Directory Where BLOB resides.
create or replace directory temp as ‘/oradata2‘;

2)Grant read permission to the user who work with this directory.
grant read on directory temp to arju;

3)Create the Table which holds lob object.
-- the storage table for the image file
CREATE TABLE pdm (
dname VARCHAR2(30), -- directory name
sname VARCHAR2(30), -- subdirectory name
fname VARCHAR2(30), -- file name
iblob BLOB); -- image file

4)Create the procedure that insert BLOB objects.

-- create the procedure to load the file
CREATE OR REPLACE PROCEDURE load_file (
pdname VARCHAR2,
psname VARCHAR2,
pfname VARCHAR2) IS

src_file BFILE;
dst_file BLOB;
lgh_file BINARY_INTEGER;
BEGIN
src_file := bfilename(‘TEMP‘, pfname);

-- insert a NULL record to lock
INSERT INTO pdm
(dname, sname, fname, iblob)
VALUES
(pdname, psname, pfname, EMPTY_BLOB())
RETURNING iblob INTO dst_file;

-- lock record
SELECT iblob
INTO dst_file
FROM pdm
WHERE dname = pdname
AND sname = psname
AND fname = pfname
FOR UPDATE;

-- open the file
dbms_lob.fileopen(src_file, dbms_lob.file_readonly);

-- determine length
lgh_file := dbms_lob.getlength(src_file);

-- read the file
dbms_lob.loadfromfile(dst_file, src_file, lgh_file);

-- update the blob field
UPDATE pdm
SET iblob = dst_file
WHERE dname = pdname
AND sname = psname
AND fname = pfname;

-- close file
dbms_lob.fileclose(src_file);
END load_file;
/

5)Execute the Procedure.

SQL> exec load_file(‘TEMP‘,‘This is Image‘,‘tritha7.png‘);
PL/SQL procedure successfully completed.

6) From OS see the BLOB size.

SQL> !ls -l /oradata2/tritha7.png
-rwxr-xr-x 1 oracle oinstall 21150 Jun 9 01:55 /oradata2/tritha7.png

7)From Oracle Determine Blob size.
1 declare
2 a blob;
3 begin
4 select iblob into a from pdm;
5 dbms_output.put_line(dbms_lob.getlength(a));
6* end;
SQL> /

PL/SQL procedure successfully completed.

SQL> set serverout on
SQL> /
21150

来源:http://space.itpub.net/16860121/viewspace-717065

最近遇到好多需要存储Oracle BLOB 需求。 众所周知,BLOB 是用来存储图片、PDF、等大数据对象的。由于公司的需要我们所有的数据库操作都要使用存储过程来操作。所以首先先贴上一个BLOB存储的存储过程供大家参考:

Sql代码

  1. create or replace
  2. procedure NDSSP_backup_fund (fund_id_in in varchar2 ,selector_in in varchar2,
  3. time_in in timestamp,blob_in in BLOB)
  4. is
  5. key number;
  6. blob_tmp blob;
  7. begin
  8. delete from fund_backup bf where bf.selector = selector_in and bf.fund_id = fund_id_in;
  9. select fund_backup_seq.nextval into key from dual;
  10. insert into fund_backup values(key,selector_in,fund_id_in,empty_blob(),time_in);
  11. select content into  blob_tmp from fund_backup where id = key for update;
  12. dbms_lob.copy(blob_tmp, blob_in, dbms_lob.getLength(blob_in));
  13. end NDSSP_backup_fund;

大家只要关注BLOB存储的部分就好了,其他的部分都可以忽略。正如大家所看到的,我们想要调用这个存储过程,必须要传递一个BLOB 对象。

来源:http://lei6744.iteye.com/blog/1127608

时间: 2024-11-05 04:29:59

Oracle Insert BLOB的相关文章

java操作oracle的blob,clob数据

一.区别和定义 LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列 LONG RAW: 可变长二进制数据,最长2G CLOB:  字符大对象Clob 用来存储单字节的字符数据 NCLOB: 用来存储多字节的字符数据 BLOB: 用于存储二进制数据 BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访.但该文件不包含在数据库内. bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对o

Java读取/更新Oracle数据库blob字段

在写java程序过程中,如何读取Oracle数据库表某类型为blob的字段? 以下是我在写程序的时候一种解决方法.核心语句.(传上来做了修改,格式不要学习,养成良好习惯) 详细请参考: 读取序列ID:http://blog.csdn.net/yzsind/article/details/6918506 BLOB相关:http://jslfl.iteye.com/blog/1771949 http://www.linuxidc.com/Linux/2011-08/40218.htm http://

Oracle数据库BLOB字段的存取

述]     Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据. 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对 blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入,那么如何获得Blob的cursor呢? 这需要你先插入一个empty的blob,这将创建一个blob的cursor,然后你再把这个empty的blob的cursor 用select查询出来

oracle中Blob和Clob类型的区别

一.oracle中Blob和Clob类型的区别BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的的,或者可以直接用LOB字段代替这两个.但是为了更好的管理ORACLE数据库,通常像图片.文件.音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去.而像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便. BLOB全称为二进制大型对象(Binary Large Object).它用于存储数据

关于ODBC的配置、访问ORACLE的BLOB及CString的保存

在使用C++访问ORACLE的时候,ODBC是一种选择,然后再使用CDatabase来进行openex的时候,DSN是需要配置的.以下是配置DSN的方法 打开ODBC数据源管理器(orc1是我已经配置好了的,在配置之前是没有的) 点击"添加",出现一下对话框: 选择Oracle in OraClinetxxx,后面的xxx代表版本不一样,可能会不一样,点击"完成" TNS Service Name是可以选择的(我的是ORCL),选中它,Data Source Nam

使用SSH操作Oracle中BLOB大对象

package entity; /** * Bigobject entity. @author MyEclipse Persistence Tools */ public class Bigobject implements java.io.Serializable { // Fields private Integer id; private byte[] tblob; private String filename; // Constructors /** default construct

使用oracle压缩blob对象

 1.使用oracle压缩blob对象 l_blob := utl_compress.lz_compress(l_blob); 2.将blob转换成clob FUNCTION blob_to_clob(blob_in IN BLOB) RETURN CLOB AS v_clob    CLOB; v_varchar VARCHAR2(32767 ); v_start   PLS_INTEGER := 1 ; v_buffer  PLS_INTEGER := 32767 ; tmp_num  

oracle[insert 时报错: 单行子查询返回多行]

-- 错误的写法 insert into t_b_partner_vehicle(id, partner_id, vehicle_id) (seq_t_b_partner_vehicle.nextval,121, (select id from t_b_car_info where org_id in(1441,1427))) -- Error 单行子查询返回多行 -- 正确的写法 insert into t_b_partner_vehicle(id, partner_id, vehicle_i

Oracle insert all语句介绍

Oracle 中insert语句的高级用法,INSERT ALL 语句介绍: 1.无条件insert all 全部插入 CREATE TABLE t1(product_id NUMBER, product_name VARCHAR2(80),MONTH NUMBER); INSERT INTO t1 VALUES(111, '苹果',1); INSERT INTO t1 VALUES(222, '橘子',1); INSERT INTO t1 VALUES(333, '香蕉',1); COMMIT