具体可以参考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
一个例子:
存储:
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
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
sSQL = "SELECT tmp_file FROM t WHERE id = " & id
完。
大型对象数据类型分内部和外部两种,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;
不用插在blob列中麽?急盼答复……