求教:oracle中图像数据的添加与读取
各位神仙:
请问oracle中图像数据的存储与输出怎么实现啊?
听说使用blob ,能不能具体讲述一下,一定有很多人期待你的热心答复:)
问题点数:0、回复次数:5Top
1 楼linysh(我爱小朋友)回复于 2004-12-03 21:48:46 得分 0
具体可以参考oracle的文档,有关OO4O方面的文章。
一个例子:
存储:
create table t (
id number(10),
tmp_file blob,
primary key(id));
/*** ASP 程序 *****/
formData = Request.BinaryRead(Request.TotalBytes())
sSelectSQL = "SELECT id,tmp_file FROM t WHERE id = " & id
sInsertSQL = "insert into t(id,tmp_file)" & _
" values("&id&",EMPTY_BLOB())"
Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OO4OSession.OpenDatabase(sDataBase, sUserPsw, 0)
OraDatabase.begintrans
'OraDatabase.AutoCommit = true
OraDatabase.ExecuteSQL ( sInsertSQL )
set OraDynaset=OraDatabase.CreateDynaset(sSelectSQL,ORADYN_DEFAULT )
OraDynaset.Edit
OraDynaset.Fields(sFieldImage).AppendChunk sFormData
OraDynaset.Update
OraDatabase.committrans
Top
2 楼linysh(我爱小朋友)回复于 2004-12-03 21:53:32 得分 0
续上:
sDataBase = 数据库实例名, sUserPsw = 相关的用户名/密码 .
输出文件:/* 假设原来保存的是Word文档 */
BytesRead = 0
'Reading in 32K chunks
ChunkSize= 32768
Set OO4OSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OO4OSession.OpenDatabase(sDataBase, sUserPsw, 0)
Set OraDynaset=OraDatabase.CreateDynaset(sSQL,ORADYN_DEFAULT)
if not OraDynaset.EOF then
Response.ContentType = "application/msword"
i=0
Do
BytesRead = OraDynaset.Fields(sFieldImage).GetChunkByteEx(CurChunkEx,i * ChunkSize, ChunkSize)
if BytesRead > 0 then
Response.BinaryWrite CurChunkEx
end if
i=i+1
Loop Until BytesRead < ChunkSize
Top
3 楼linysh(我爱小朋友)回复于 2004-12-03 21:55:22 得分 0
续上:
sSQL = "SELECT tmp_file FROM t WHERE id = " & id
完。
Top
4 楼wangybyangxr(王永斌)回复于 2004-12-03 22:28:13 得分 0
BLOB是Oralce的一种大型对象数据类型。
大型对象数据类型分内部和外部两种,BLOB、CLOB属于内部的大型对象, BFILE为外部大对象。
不说多余的话了,说一下怎样用BLOB吧:
Oracle 有一个包:DBMS_LOB支持大型对象功能的编程,它的函数/过程如下:
DBMS_JOB.APPEND(目标定位器,源定位器)
DBMS_JOB.READ(定位器,amount,offset, buffer)
--amount:从文件中读取到缓冲中的字节数,
--offset 偏移值
DBMS_JOB.WRITE(定位器,amount,offset, buffer)
DBMS_JOB.OPEN(定位器)
DBMS_JOB.CLOSE(定位器)
DBMS_JOB.ISOPEN(定位器)
举个例子:
用外部大型对象
1.建立一个目录对象:
CREATE DIRECTORY IMAGES_DIR AS 'C:\TEMP'
2.
DECLARE
V_FILE BFILE;
BEGIN
V_FILE := BFILENAME('IMAGES_DIR', 'image1.gif');
IF DBMS_LOB.FILEEXISTS(V_FILE) = 1 THEN --等于1为文件存在。
INSERT INTO TABNAME (bfile列)VALUES(V_FILE);
COMMIT;
END IF;
END;
Top
5 楼aaron_jg()回复于 2004-12-08 20:48:18 得分 0
谢谢两位前辈的热心帮助!
linysh哥:asp我看不懂啊
wangybyangxr(王永斌) :是在sql plus 中执行麽,我试了,为什么不行呢
不用插在blob列中麽?急盼答复……Top




