专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > AIX

数据库读clob解决办法

发布时间:2011-06-27 19:06:19 文章来源:www.iduyao.cn 采编人员:星星草
数据库读clob
在AIX上的多线程开发,char test[512000];用的栈空间,有2个这么大的变量,好像AIX只支持600K的栈,所以会core,想用堆空间,虽然oracle proc里面编译选项是CPP,可是不让我char *test = new char[512000];
C/C++ code

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,

------解决方案--------------------
试试定义为静态变量
static char test[512000]
------解决方案--------------------
malloc啊
------解决方案--------------------
其实是数据库的问题,跟是否为 aix 没有关系。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: