- 论坛徽章:
- 0
|
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;
}
可最后结果是只完成了插入一条数据。
请高手帮我解决以下 |
|