还没试过
看oracle 文档把
看oracle 文档把
解决方案 »
- 执行oracle查询语句提示missing expression
- 求马士兵Oracle视频教程
- 菜鸟问题!如何创建查询一个表信息的存储过程
- 大哥大姐们帮我解决一个问题吧,可能关于复制的,再三再三再三感谢了!!!!!
- 怎么将dbms_sql的结果输出到ref cursor中.
- 求教一下执行计划中ilter 与 nested loops的关系
- oracle10g release1 版本的数据库,A 用户要怎么才能访问B用户的表呢?
- 请问在ORACLE8.16中是否不支持FLOAT数据类型?
- 请大家帮我看看这个查询!很急!
- 我的OracleOEM在WIN2000下启动不了,能给解决吗?hurry!!!
- oracle中游标能定位吗?
- 怎样用程序实现在线备份oracle数据库?
// sqlstmt="select picture from media where number_of_picture=";
AnsiString sqlstmt=no_flag;
//sqlstmt=(text *) "select picture from media where number_of_picture='z888888888888888888001110000001001' "; if (OCIStmtPrepare(stmthp, errhp, sqlstmt.c_str(), (ub4) sqlstmt.Length(),
(ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT))
{
(void) printf("FAILED: OCIStmtPrepare() sqlstmt\n");
return OCI_ERROR;
}
if( OCIDefineByPos(stmthp, &defnp2, errhp, (ub4) 1,
(dvoid *) &blob, (sb4) -1, (ub2) SQLT_BLOB,
(dvoid *) 0, (ub2 *) 0, (ub2 *) 0, (ub4) OCI_DEFAULT))
{
(void) printf("FAILED: OCIDefineByPos()\n");
return OCI_ERROR;
} /* execute the select and fetch one row */
if (OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1, (ub4) 0,
(CONST OCISnapshot*) 0, (OCISnapshot*) 0,
(ub4) OCI_DEFAULT))
{ /* sword OCIErrorGet ( dvoid *hndlp,
ub4 recordno,
text *sqlstate,
sb4 *errcodep,
text *bufp,
ub4 bufsiz,
ub4 type ); */
text msgbuf[512];
sb4 errcode = 0; (void) OCIErrorGet((dvoid *) errhp, (ub4) 1, (text *) NULL, &errcode,
msgbuf, (ub4) sizeof(msgbuf), (ub4) OCI_HTYPE_ERROR); return OCI_ERROR;
} return OCI_SUCCESS;
}//------------------------------------------------------------------------------
/*
关于写图片的想法: 1:用上面的blob_locator()函数实现blob字段的locator定位,前面返回的就是一个blob_locator 的指针 2:下面就是用stream_to_file()函数实现的东西了,呵呵,整各功能的实现就ok了,呵呵*/
int ocinode::stream_write_lob(OCILobLocator *lobl,FILE *FP)
{
char *bufp[MAXBUFLEN];
ub4 offset = 1;
ub4 loblen = 0;
ub4 amtp;
ub1 piece;
sword retval;
int readval;
ub4 len = 0;
ub4 nbytes;
ub4 filelen;
ub4 remainder; if (FP==NULL)
{
return -1;
} fseek(FP, 0, SEEK_END);
filelen = (ftell(FP));
remainder = filelen;
amtp = filelen; OCILobGetLength(svchp, errhp, lobl, &loblen); fseek(FP, 0, 0); //////////////////////////////////////////////////// //开始具体的读图片了,呵呵 if (filelen > MAXBUFLEN)
nbytes = MAXBUFLEN;
else
nbytes = filelen; *bufp="";
int i=fread(bufp, nbytes, 1, FP);
if (i!=1)
{
return -1;
} remainder -= nbytes; if (remainder == 0) /* exactly one piece in the file */
{
if ( (retval = OCILobWrite(svchp, errhp, lobl, &amtp, offset, (dvoid *) bufp,
(ub4) nbytes, OCI_ONE_PIECE, (dvoid *)0,
(sb4 (*)(dvoid *, dvoid *, ub4 *, ub1 *)) 0,
(ub2) 0, (ub1) SQLCS_IMPLICIT) )!= OCI_SUCCESS)
{
return -1;
} }
else /* more than one piece */
{ if (OCILobWrite(svchp, errhp, lobl, &amtp, offset, (dvoid *) bufp,
(ub4) MAXBUFLEN, OCI_FIRST_PIECE, (dvoid *)0,
(sb4 (*)(dvoid *, dvoid *, ub4 *, ub1 *)) 0,
(ub2) 0, (ub1) SQLCS_IMPLICIT) != OCI_NEED_DATA)
{
return -1;
} piece = OCI_NEXT_PIECE;
do
{
*bufp="";
if (remainder > MAXBUFLEN)
nbytes = MAXBUFLEN; else
{
nbytes = remainder;
piece = OCI_LAST_PIECE;
} if (fread((void *)bufp, (size_t)nbytes, 1, FP) != 1)
{
piece = OCI_LAST_PIECE;
} retval = OCILobWrite(svchp, errhp, lobl, &amtp, offset, (dvoid *) bufp,
(ub4) nbytes, piece, (dvoid *)0,
(sb4 (*)(dvoid *, dvoid *, ub4 *, ub1 *)) 0,
(ub2) 0, (ub1) SQLCS_IMPLICIT);
remainder -= nbytes;
/////////////////////////////////
if (retval==OCI_ERROR)
{
int errcode;
char *errbuf; (void) OCIErrorGet((dvoid *)errhp, (ub4) 1, (text *) NULL, &errcode,
errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
// ShowMessage(IntToStr(errcode));
}
//////////////////////////////// } while (retval == OCI_NEED_DATA && !feof(FP));
} if (retval != OCI_SUCCESS)
{
return -1;
}
fclose(FP);
//fclose(fp_test);
OCITransCommit (svchp,errhp,OCI_DEFAULT);
return 0;}
///////////////////////////////////////////////////////////////////////////////////