- 论坛徽章:
- 0
|
我在AIX上写了个ORACLE的C程序,程序执行时报如下错误
time = 20050520
count= 26080
Begin Truncate Table ...
Segmentation fault(coredump)
三张数据表有产生,但系统报错?该如何查这个问题
程序如下:
int main()
{
int crnDat;
int capDat;
char newinf[200];
long reqType;
int status,rsplen;
int sum_txrsts;
int sum_txnsts;
long trcno2;
int count_delete;
char txndat_delete[11];
char time[15];
char errMsg[1024];
int count_trcno2_twntn2;
short ind[20];
int count;
int i;
int j=0;
char timeStr[20];
char TimeStr[9];
char TimeDat[11];
i=0;
if ( ConnectToOracle()==-1 )
{
puts("ERROR:Server atx_log can not connect to oracle." ;
exit( -1 );
}
GetSysTime(timeStr);
memcpy(TimeStr,timeStr, ;
memcpy(TimeDat,TimeStr, ;
strcpy(TimeDat,"20050520", ;
printf(" time = %s\n",TimeDat);
if (ProcessRP7011(TimeDat)< 0)
printf("7011报表产生错误\n" ;
else
printf("7011报表产生成功\n" ;
return 0;
}
int ProcessRP7011(char *TimeDat)
{
BcsmDef *prline;
RsfAcc *prhead1,*prhead2;
FILE *bankfile;
char filename[50];
int j=0;
int status;
int Bamt,Samt;
char Bcuu[3];
char Bchar[3];
char Scuu[3];
char Schar[3];
char Iacc1[23];
char Iacc2[23];
char Itermid[10];
char Itellno1[3];
char Itellno2[3];
char Isup1[3];
char Isup2[3];
char Itime1[7];
char Itime2[7];
char Itxncode1[5];
char Itxncode2[5];
char Idb1[2];
char Idb2[2];
float Iamt;
char Imemo1[6];
char Imemo2[6];
char Iidno1[20];
char Iidno2[20];
char Iname1[21];
char Iname2[21];
char Icuu1[3];
char Icuu2[3];
char oldbank[8];
char Ibank[8];
memset(oldbank,' ', ;
oldbank[7]='\0';
sprintf(filename,"/collate/7011.%8s",TimeDat);
printf("\n get bank data filename=%s\n",filename);
if((bankfile=fopen(filename,"w" )==NULL)
{
printf("\nCan't Open the bank output file !" ;
return -1;
}
TruncateTable();
EXEC SQL WHENEVER SQLERROR goto sqlerror_err;
EXEC SQL COMMIT;
EXEC SQL INSERT INTO RP11A SELECT * FROM RSFHSSM where ( txncode='1610' or txncode='1100' or txncode='3510' ) and memo like '%2%';
EXEC SQL COMMIT;
EXEC SQL INSERT INTO RP11B SELECT * FROM RSFHSSM where memo like '%2%' and (txncode='1200'or txncode='1620' or txncode='3590' or txncode='3591');
EXEC SQL COMMIT;
EXEC SQL INSERT INTO RP11C ( ACC1,ACC2,TERM1,TELL1,TELL2,SUP1,SUP2,TIME1,TIME2,TXNCODE1,TXNCODE2,DB1,DB2,AMT,MEMO1,MEMO2,ID1,ID2,NAME1,NAME2,CUU1,CUU2)
select A.ACCOUNTNUMBERDATE,B.ACCOUNTNUMBERDATE,A.TERMID,A.TELLERNO,B.TELLERNO,A.SUPNO,B.SUPNO,A.TXNTIME,B.TXNTIME,A.TXNCODE,B.TXNCODE,A.DB,B.DB,A.TXNAMT,A.MEMO,B.MEMO,A.IDNOCODE,B.IDNOCODE,A.NAME,B.NAME,A.CUU,B.CUU
FROM rp11a a,rp11b b where( A.TXNAMT=B.TXNAMT ) AND (SUBSTR(A.TERMID,1,7)=SUBSTR(B.TERMID,1,7)) and (SUBSTR(A.NAME,1,5) != SUBSTR(B.NAME,1,5));
EXEC SQL COMMIT;
EXEC SQL DECLARE c_ejt7011 CURSOR FOR
SELECT nvl(ACC1,' '),
nvl(ACC2,' '),
nvl(SUBSTR(TERM1,1,7),' '),
nvl(TELL1,' '),
nvl(TELL2,' '),
nvl(SUP1,' '),
nvl(SUP2,' '),
nvl(TIME1,' '),
nvl(TIME2,' '),
nvl(TXNCODE1,' '),
nvl(TXNCODE2,' '),
nvl(DB1,' '),
nvl(DB2,' '),
nvl(AMT,0),
nvl(MEMO1,' '),
nvl(MEMO2,' '),
nvl(ID1,' '),
nvl(ID2,' '),
nvl(NAME1,' '),
nvl(NAME2,' '),
nvl(CUU1,' '),
nvl(CUU2,' ')
FROM RP11C
order by term1;
EXEC SQL OPEN c_ejt7011;
while(sqlca.sqlcode ==0)
{
EXEC SQL FETCH c_ejt7011
INTO :Iacc1,
:Iacc2,
:Itermid,
:Itellno1,
:Itellno2,
:Isup1,
:Isup2,
:Itime1,
:Itime2,
:Itxncode1,
:Itxncode2,
:Idb1,
:Idb2,
:Iamt,
:Imemo1,
:Imemo2,
:Iidno1,
:Iidno2,
:Iname1,
:Iname2,
:Icuu1,
:Icuu2;
if (sqlca.sqlcode ==1403)break;
fprintf(bankfile,"name1= %s n,ame2 %s
\n",Iname1,Iname2);
printf("sql= %d,j= %d\n",sqlca.sqlcode,j);
}
fclose(bankfile);
EXEC SQL CLOSE c_ejt7011;
EXEC SQL COMMIT ;
return 1;
sqlerror_err:
EXEC SQL COMMIT ;
printf("SQLERROR1: %s\n",sqlca.sqlerrm.sqlerrmc);
EXEC SQL CLOSE c_ejt7011;
return -1;
}
int TruncateTable( )
{
printf("Begin Truncate Table ...\n" ;
EXEC SQL TRUNCATE TABLE RP11A;
if(sqlca.sqlcode!=0)
{
printf("Truncate table RP11A error !\n" ;
}
EXEC SQL TRUNCATE TABLE RP11B;
if(sqlca.sqlcode!=0)
{
printf("Truncate table RP11B error !\n" ;
}
EXEC SQL TRUNCATE TABLE RP11C;
if(sqlca.sqlcode!=0)
{
printf("Truncate table RP11C error !\n" ;
}
sqlerror_err:
EXEC SQL COMMIT;
return -1;
} |
|