调用dbms_lob包的有关功能就可以了。
对于存在BLOB字段的表不能写:select * from ..
应该将其它数据与BLOB数据分开读取,而且BLOB字段每次读一个比较好。
select blobcolname into :blob from tabname where ...
对于存在BLOB字段的表不能写:select * from ..
应该将其它数据与BLOB数据分开读取,而且BLOB字段每次读一个比较好。
select blobcolname into :blob from tabname where ...
解决方案 »
- oracle number 小数位最后的0会被自动去掉? 应该如何不让他自动去掉后面的0 如: number(6,2) 插入0.00
- 权限问题
- 存储过程实现数据校验
- 请教:Oracle ORA-24331 缓冲区过小的问题
- 使用Oracle 数据库链的SQL语句 与不使用 数据库链的SQL语句两者有什么区别 ??
- 怎样使用exp/imp从oracle9i导入到oracle8i?
- 如何实现oracle在月底自动运行指定的存储过程?
- 能否通过oracle的可视化工具添加表中数据(不用sql)
- 判断大小问题,达人进!!!!!!
- 求sql语句
- BLOB字段读写,急
- 怎样定义一个JOB每隔20分钟执行一下?
fil BFILE;
dir_alias VARCHAR2(30);
name VARCHAR2(2000);
BEGIN
IF (dbms_lob.fileexists(fil))
THEN
dbms_lob.filegetname(fil, dir_alias, name);
dbms_output.put_line("Opening " || dir_alias || name);
dbms_lob.fileopen(fil, dbms_lob.file_readonly);
-- file operations
dbms_output.fileclose(fil);
END IF;
END;CREATE OR REPLACE PROCEDURE Example_16 IS
lob_loc BLOB;
buffer RAW;
amt BINARY_INTEGER := 32767;
pos INTEGER := 2147483647;
i INTEGER;
BEGIN
SELECT b_col INTO lob_loc
FROM lob_table
WHERE key_value = 12 FOR UPDATE;
FOR i IN 1..3 LOOP
dbms_lob.write (lob_loc, amt, pos, buffer);
-- fill in more data
pos := pos + amt;
END LOOP;
EXCEPTION4
WHEN some_exception
THEN handle_exception;
END;
-- --
1 SQL> alter table bb add c blob;Table alteredSQL> update bb set c=hextoraw('2222');1 row updatedSQL> select a,dbms_lob.substr(c) from bb;A DBMS_LOB.SUBSTR(C)
-- --------------------------------------------------------------------------------
1 2222
create or replace function getblob(p_a in varchar2)
return blob
as
p_blob blob;
begin
select c into p_blob from bb where a=p_a for update;
return dbms_lob.substr(p_blob);
end;
/
这个函数需要设置读的数据量(缺省为32768),可是数据大小不定,而且比32768大,一定要设一个很大的值吗?
我在讲select 的语法