代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

您现在的位置是:首页>_AIX

数据库读clob,该怎么处理

发布时间:2019-11-21浏览(838)

    数据库读clob
    在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,
    ------解决方案--------------------
    试试定义为静态变量
    static char test[512000]
    ------解决方案--------------------
    malloc啊
    ------解决方案--------------------
    其实是数据库的问题,跟是否为 aix 没有关系。