Chinaunix

标题: 同步数据遇到的问题 [打印本页]

作者: butterzz2000    时间: 2007-07-18 14:04
标题: 同步数据遇到的问题
int InsertBDTTable()
{
    int n;
    EXEC SQL BEGIN DECLARE SECTION;       
    int nCount;
    BDTNEWSTRU bdtnewstru;
    BDTSTRU bdtstru;
    EXEC SQL END DECLARE SECTION;                
         
    EXEC SQL SELECT COUNT (*) INTO :nCount FROM BDTNEW;       
    EXEC SQL DECLARE bdtnewcur CURSOR FOR SELECT * FROM BDTNEW;       
    EXEC SQL OPEN bdtnewcur;
    for(n = 0; n < nCount; n++)
    {               
        memset(&bdtnewstru, 0, sizeof(bdtnewstru));
        memset(&bdtstru, 0, sizeof(bdtstru));
               
        EXEC SQL FETCH bdtnewcur INTO :bdtnewstru;
                          
        EXEC SQL INSERT BDT VALUES (:bdtnewstru);
                          
        if (sqlca.sqlcode == SQLCODE_DUPKEY)               
        {
            EXEC SQL   DELETE  BDT WHERE   BDTPRO_COD =:bdtnewstru.szPRO_COD AND
            BDTBR =:bdtnewstru.szBR;
            EXEC SQL INSERT BDT VALUES (:bdtnewstru);                                    
        }                
    }
    EXEC SQL COMMIT;
    EXEC SQL CLOSE bdtnewcur;
    EXEC SQL DEALLOCATE CURSOR bdtnewcur;            
}

如上
如果nCount值小的时候是没问题的。
可是如果nCount值达到几十万,并且,需要插入的数据达到几十万的时候。
日志空间就满了。
这个该如何解决呢??
我曾试过把    EXEC SQL COMMIT;
放到insert操作之后,即:
if (sqlca.sqlcode == SQLCODE_DUPKEY)               
        {
            EXEC SQL   DELETE  BDT WHERE   BDTPRO_COD =:bdtnewstru.szPRO_COD AND
            BDTBR =:bdtnewstru.szBR;
            EXEC SQL INSERT BDT VALUES (:bdtnewstru);            
                    EXEC SQL COMMIT;
                       
        }       
可最后结果是只完成了插入一条数据。
请高手帮我解决以下
作者: butterzz2000    时间: 2007-07-19 08:56
??一天了都没人??
作者: aliking    时间: 2007-07-19 16:13
在一个打开的游标遍历过程中,是没办法提交多个事务的。
如果你的应用这么简单,建议用BCP同步。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2