数据库读clob

greenweather 2012-03-17 03:47:31
在AIX上的多线程开发,char test[512000];用的栈空间,有2个这么大的变量,好像AIX只支持600K的栈,所以会core,想用堆空间,虽然oracle proc里面编译选项是CPP,可是不让我char *test = new char[512000];

int CEntityBase::readClob(OCIClobLocator *p_clob, char* buff)
{
struct sqlca sqlca;
EXEC SQL CONTEXT USE:m_pWorkThread->m_pvSqlCtx;

EXEC SQL BEGIN DECLARE SECTION;
OCIClobLocator *clob;
varchar *lvr;
int amt;
int bufsize;
EXEC SQL END DECLARE SECTION;

#if 0
if(sqlca.sqlcode != 0)
{
return sqlca.sqlcode;
}
#endif

bufsize = 2048;
clob = p_clob;
char* tmp = new char[2 + bufsize];
memset(tmp, 0, 2+bufsize);
lvr = (varchar *)tmp;
lvr->len = bufsize;
int len = 0;
amt = 0;

EXEC SQL WHENEVER NOT FOUND DO break;
while (TRUE)
{
memset(lvr,0,2+bufsize);
EXEC SQL LOB READ :amt FROM :clob INTO :lvr WITH LENGTH :bufsize;
strcat(buff, (char *)lvr->arr);
// memcpy(buff + len, lvr->arr, lvr->len);
// len += lvr->len;
}

EXEC SQL WHENEVER NOT FOUND CONTINUE;
strcat(buff, (char *)lvr->arr);
// memcpy(buff + len, lvr->arr, lvr->len);
// len += lvr->len;
// buff[len] = 0;
delete[] tmp;
return 0;
}

OCIClobLocator *sbillpic1data_VALUE;
readClob(sbillpic1data_VALUE, test);
CUFcString a = test;
其实就是最后想把test赋值给a,
...全文
71 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
greenweather 2012-03-18
  • 打赏
  • 举报
回复
测试,malloc不行
greenweather 2012-03-18
  • 打赏
  • 举报
回复
不过不能定义512000这么大的总是AIX的栈问题吧?
greenweather 2012-03-18
  • 打赏
  • 举报
回复
不能定义char*确实是数据库proc的问题
justkk 2012-03-17
  • 打赏
  • 举报
回复
试试定义为静态变量
static char test[512000]
shenghuiping2001 2012-03-17
  • 打赏
  • 举报
回复
其实是数据库的问题,跟是否为 aix 没有关系。
qq120848369 2012-03-17
  • 打赏
  • 举报
回复
malloc啊

1,194

社区成员

发帖
与我相关
我的任务
社区描述
该论坛主要探讨IBM AIX平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
社区管理员
  • IBM AIX社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧