我存一个1.5G的文件没问题,大概十几分钟就完成了,存一个3.5G的文件就存不了啊
ps:表空间大小是没问题的
ps:表空间大小是没问题的
解决方案 »
- 获得星期几,怎么写?
- 插入语句 执行了半小时 还没执行完 谁给个方法啊
- 关于访问oracle数据库数据是乱码的问题
- 问下,rman备份需要什么权限以及条件啊?我fat用户有connect、resoures角色能不能做rman备份呢?
- 如何动态调用存储过程
- 新手求教,请帮助!
- 請教﹕分析函數中能否實現我的需求......
- oracle初学者第二天的小问题,多谢,给分
- 如何删除一个表空间文件啊?
- 单机装oracle8。0。5服务总是启动不了是怎么回事啊,
- 关于三个配置文件 tnsnames.ora listener.ora sqlnet.ora 的疑问
- 将B表结果插入A表,如果A存在则将A中的一个字段值加1,不存在则插入新纪录
我的意思是,读写3.5G文件,要使用到巨指针,否则会出错,而且出了错,你都不一定知道。ORACLE中的BLOB是支持4GB的存储的。
OCI_Lob *lobData = OCI_LobCreate(cn, OCI_BLOB);
QFile dataFileInfo(qsResourceDataFile);//源文件3.5G
bool bOpenfile = dataFileInfo.open( QIODevice::ReadOnly );
if( !bOpenfile )
return DATABASE_ERROR;
QDataStream dsDataRead( &dataFileInfo );
qint64 nFileSize = dataFileInfo.size();
if (nFileSize <= RESOURCE_ONCE_READ_SIZE)
{
char *pBuff = new char[ nFileSize ];
dsDataRead.readRawData(pBuff,nFileSize);
OCI_LobAppend(lobData,pBuff,nFileSize);
delete [] pBuff;
pBuff = NULL;
}
else
{
big_uint iReadTimes = nFileSize/RESOURCE_ONCE_READ_SIZE;
big_uint iReaded = 0;
char *pBuff = new char[ RESOURCE_ONCE_READ_SIZE ];
for (big_uint i = 0; i<iReadTimes; i++)
{
dsDataRead.readRawData(pBuff,RESOURCE_ONCE_READ_SIZE);
OCI_LobAppend(lobData,pBuff,RESOURCE_ONCE_READ_SIZE);
iReaded += RESOURCE_ONCE_READ_SIZE;
}
delete [] pBuff;
pBuff = NULL;
qint64 iRemain = nFileSize - iReaded;
if (iRemain > 0)
{
char *pRemainBuff = new char[ iRemain ];
dsDataRead.readRawData(pRemainBuff,iRemain);
OCI_LobAppend(lobData,pRemainBuff,iRemain);
delete [] pRemainBuff;
pRemainBuff = NULL;
}
}
dataFileInfo.close();
OCI_Prepare(st,sql.toLocal8Bit().constData());
OCI_BindLob(st,":data",lobData);
OCI_Execute(st);//执行sql,一直没跳出来
直接bind这个:data,去写入lob,不知道是否可行。通常的做法是,先插入一个empty_blob(),然后去select for update,
OCILobOpen(svchp, errhp, blob, OCI_LOB_READWRITE), 这之后再像你上边的分片写入。
应该没什么问题。
而且1.5G能成功也说明了这一点是没问题的。
非常感谢你的鼎力帮助!
能贴一下这段代码吗?