用大型对象,LOB,不好意思,我也正在研究,帮你UP吧!
解决方案 »
- 求教一个SQL语句
- 如此奇怪的SqlPlus连接远程数据库的问题
- SQL如何求合计,不要小计
- 一个比较复杂的取值问题[在线给分]
- 一个100万条记录表,目前查询速度过慢,让你给出5条优化措施
- oracle分页问题~~急~~~~~~~
- [求助&散分]关于oracle时间不一致的问题!
- 存储过程显示异常
- {100分}在windows2000 professional下安装oracle817后,运行成功,当我把计算机的名称改变以后,再启动oracle时提示: ORA-12545:连接
- prime table sql
- 谁能给我解释一下svrmgr和lsnrctl的作用是什么?
- (+) 左边的符号是做什么用的?
用blob字段(8i或以上)
Oracle8用long字段,方法可以通过编程或其他工具(pl/sql developer)把图片存进去。
我是低手,所以,我顶!
vb+oracle8i
想知道如何用VB+oracle8I
如何存图片,
如何存有格式文档我查了精华,例子不能用,或者我的环境有问题!
各位大哥,拉一把吧!
可以参考oracle 下面的例子
里面有各种你想要的
请问锐剑兄:
你说的那个例子具体在哪个目录下?
#include <ctype.h>
#include <atmi.h>
#include <userlog.h>
#include <fml32.h>
#include <stdio.h>
#include <string.h>
#include <setjmp.h>
#include <sqlda.h>
#include <stdlib.h>
#include <sqlcpr.h>
#include <ocidfn.h>
#include <ociapr.h>
#include <oratypes.h>
#define LOCALCONNECTION "local/local1111@ora817"
EXEC ORACLE OPTION (ORACA=YES);
EXEC ORACLE OPTION (RELEASE_CURSOR=YES); EXEC SQL INCLUDE sqlda;
EXEC SQL INCLUDE sqlca;FILE *fp ;
unsigned filelen, remainder, nbytes ;
boolean last ;#define MAXBUFLEN 5000EXEC SQL BEGIN DECLARE SECTION;
char dyn_statement[1024]="";
EXEC SQL VAR dyn_statement IS STRING(1024);
char buffer[5000];
EXEC SQL VAR buffer IS RAW(5000);
OCIBlobLocator *blob ;
int amt, offset = 1 ;
char vc_user[30]=LOCALCONNECTION;
EXEC SQL END DECLARE SECTION;
main()
{
EXEC SQL CONNECT :vc_user;
EXEC SQL ALLOCATE :blob ;
EXEC SQL INSERT INTO local.lob_table (a_blob) VALUES (EMPTY_BLOB())
RETURNING a_blob INTO :blob;fp = fopen((const char *)"image.gif", (const char *)"r") ;
(void) fseek(fp, 0L, SEEK_END) ;
filelen = (unsigned int)ftell(fp) ;
amt = filelen ;if (filelen > MAXBUFLEN)
nbytes = MAXBUFLEN ;
else
nbytes = filelen ;(void) fseek(fp, 0L, SEEK_SET) ;
(void) fread((void *)buffer, (size_t)nbytes, (size_t)1, fp) ;
remainder = filelen - nbytes ;
if (remainder == 0)
{
EXEC SQL LOB WRITE ONE :amt
FROM :buffer INTO :blob AT :offset ;
}
else
{
EXEC SQL LOB WRITE FIRST :amt
FROM :buffer INTO :blob AT :offset ;
last = FALSE ;
EXEC SQL WHENEVER SQLERROR DO break ;
do
{
if (remainder > MAXBUFLEN)
nbytes = MAXBUFLEN ;
else
{
nbytes = remainder ;
last = TRUE ;
}
if (fread((void *)buffer, (size_t)nbytes, (size_t)1, fp) != 1)
last = TRUE ;
if (last)
{
EXEC SQL LOB WRITE LAST :amt
FROM :buffer INTO :blob ;
}
else
{
EXEC SQL LOB WRITE NEXT :amt
FROM :buffer INTO :blob ;
}
remainder -= nbytes ;
}
while (!last && !feof(fp)) ;
}
EXEC SQL COMMIT WORK RELEASE;
}