📄 lcomm.cpp
字号:
#include "oradb.h"int DbLCOMMInsert(struct S_LCOMM* p, struct S_RESULT* pOut){ char szMsg[512]; char* TableName = p->TableName; char* SeqId = p->SeqId; int SubId = p->SubId; char* SGSNAddr = p->SGSNAddr; char* CauseForRecordClosing = p->CauseForRecordClosing; char* RSN = p->RSN; char* LRSN = p->LRSN; char* RecordExtensions = p->RecordExtensions; int SystemType = p->SystemType; int SGSNChange = p->SGSNChange; char *NodeId = p->NodeId; int RNC = p->RNC; char* SortId = p->SortId; char szSQL[SQLMAX];/* snprintf(szSQL, SQLMAX, "INSERT INTO %s (" "SEQID," "SUBID," "SGSNADDR," "CAUSERECORDCLOSING," "RECORDSEQUENCENUMBER," "LOCALRECORDSEQUENCENUMBER," "SYSTEMTYPE," "SGSNCHANGE," "NODEID," "RNCUDVOLUMN," "RECORDEXTENSIONS" ",SORTID" ") VALUES(" "'%s',%d,'%s','%s','%s'," "'%s',%d,%d,'%s',%d,'%s','%s')", TableName, SeqId,SubId,SGSNAddr,CauseForRecordClosing,RSN, LRSN,SystemType,SGSNChange,NodeId,RNC,RecordExtensions, SortId); #ifdef _DEBUG logOra(sErrLog, szSQL);#endif*/ snprintf(szSQL, SQLMAX, "INSERT INTO %s (" "SUBID," "SGSNADDR," "CAUSERECORDCLOSING," "RECORDSEQUENCENUMBER," "LOCALRECORDSEQUENCENUMBER," "SYSTEMTYPE," "SGSNCHANGE," "NODEID," "RNCUDVOLUMN," "RECORDEXTENSIONS" ",SORTID" ") VALUES(" "%d,'%s',%s,%s," "%s,%d,%d,'%s',%d,'%s',%s)", TableName, SubId,SGSNAddr,CauseForRecordClosing,RSN, LRSN,SystemType,SGSNChange,NodeId,RNC,RecordExtensions, SortId); #ifdef _DEBUG logOra(sErrLog, szSQL);#endif Lock(); int res = mysql_real_query(myConnect, szSQL, strlen(szSQL)); if(res != 0) { Unlock(); logOra(sErrLog, "%d %s\n", mysql_errno(myConnect), mysql_error(myConnect)); return -1; } Unlock();/* Lock(); EXEC SQL WHENEVER SQLERROR GOTO sql_error; EXEC SQL EXECUTE DECLARE BEGIN EXECUTE IMMEDIATE :szSQL using :SeqId,:SubId,:SGSNAddr,:CauseForRecordClosing,:RSN, :LRSN,:SystemType,:SGSNChange,:NodeId,:RNC,:RecordExtensions, :SortId;#ifdef NO_TRANS COMMIT; #endif END; END-EXEC; Unlock(); pOut->nFlag = SQL_OK; return 0;sql_error: Unlock(); pOut->nFlag = SQL_RET_ERROR;#ifdef LOG_ERROR snprintf(szMsg, 512, "ORA:DbLCOMMInsert: %.70s", sqlca.sqlerrm.sqlerrmc); logOra(sErrLog, szMsg);#endif EXEC SQL WHENEVER SQLERROR CONTINUE; onError();*/ return 1;}int DbLCOMMSelect(char* pInSzTableName, char* pInSzSeqId, struct S_LCOMM** pOutLChangeLocation, int * number, struct S_RESULT* pOut){ char szMsg[512]; char SeqId[LEN_SEQ + 1]; int SubId; char SGSNAddr[45 + 1]; char CauseForRecordClosing[3]; char RSN[11]; char LRSN[11]; int SystemType; int SGSNChange; char NodeId[21]; char RecordExtensions[LEN_RecordExtensions]; int RNC; char SortId[LEN_SORT+1]; /* EXEC SQL BEGIN DECLARE SECTION; EXEC SQL VAR SortId IS STRING(LEN_SORT+1); EXEC SQL VAR SeqId IS STRING(LEN_SEQ+1); EXEC SQL VAR SGSNAddr IS STRING(45+1); EXEC SQL VAR NodeId IS STRING(20+1); EXEC SQL VAR RecordExtensions IS STRING(LEN_RecordExtensions+1); EXEC SQL VAR CauseForRecordClosing IS STRING(3); EXEC SQL VAR RSN IS STRING(11); EXEC SQL VAR LRSN IS STRING(11); EXEC SQL END DECLARE SECTION; struct S_LCOMM *pLCLOC = *pOutLChangeLocation; int nNumber = 0; char szSQL[SQLMAX]; char szSQL2[SQLMAX]; struct S_LCOMM* p2; int j; char * sz ; short id[10]; if(pLCLOC != NULL) { return -1; } snprintf(szSQL2, SQLMAX, "SELECT COUNT(*) FROM %s WHERE SEQID=%s", pInSzTableName, pInSzSeqId); snprintf(szSQL, SQLMAX, "SELECT " "SEQID," "SUBID," "SGSNADDR," "CAUSERECORDCLOSING," "RECORDSEQUENCENUMBER," "LOCALRECORDSEQUENCENUMBER," "SYSTEMTYPE," "SGSNCHANGE," "NODEID," "RNCUDVOLUMN," "RECORDEXTENSIONS" ",SORTID" " FROM %s WHERE SEQID=%s", pInSzTableName, pInSzSeqId);#ifdef _DEBUG#ifdef LOG_SELECT logOra(sErrLog, szSQL);#endif#endif *number = 0; Lock(); EXEC SQL WHENEVER SQLERROR GOTO sql_error; EXEC SQL PREPARE stat2 FROM :szSQL2; EXEC SQL DECLARE C2 CURSOR FOR stat2; EXEC SQL OPEN C2; EXEC SQL WHENEVER NOT FOUND goto notfound2; EXEC SQL FETCH C2 INTO :nNumber; EXEC SQL CLOSE C2; if(nNumber <= 0) { Unlock(); * number = 0; return 0; } sz = malloc(SIZE_S_LCOMM*nNumber); memset(sz, 0, SIZE_S_LCOMM*nNumber); EXEC SQL WHENEVER SQLERROR GOTO sql_error2; EXEC SQL PREPARE stat FROM :szSQL; EXEC SQL DECLARE C1 CURSOR FOR stat; EXEC SQL OPEN C1; EXEC SQL WHENEVER NOT FOUND goto notfound; #ifdef _DEBUG logOra(sErrLog, "CURSOR...");#endif for(j=0;j<nNumber;j++) { EXEC SQL FETCH C1 INTO :SeqId:id[8], :SubId:id[0], :SGSNAddr:id[0], :CauseForRecordClosing:id[1], :RSN:id[2], :LRSN:id[3], :SystemType:id[4], :SGSNChange:id[5], :NodeId:id[6], :RNC:id[7], :RecordExtensions:id[9], :SortId:id[0]; p2 = (struct S_LCOMM*)&sz[SIZE_S_LCOMM*j]; memcpy(p2->SeqId, SeqId, 20); memcpy(p2->SGSNAddr, SGSNAddr, 45); memcpy(p2->CauseForRecordClosing, CauseForRecordClosing,2); memcpy(p2->RSN,RSN,10); memcpy(p2->LRSN,LRSN,10); memcpy(p2->RecordExtensions, RecordExtensions, LEN_RecordExtensions); p2->SystemType = SystemType; p2->SGSNChange = SGSNChange; memcpy(p2->NodeId, NodeId, 20); p2->RNC = RNC; p2->SubId = SubId; memcpy(p2->SortId, SortId, LEN_SORT); memcpy(p2->TableName, pInSzTableName, LEN_TABLENAME); /* printf("******* %s ****\n", p2->SeqId);/* #ifdef _DEBUG logOra(sErrLog, "%d]%s " "%d %d %d %d %d " "%s " "%d", j, p2->SGSNAddr, p2->CauseForRecordClosing, p2->RSN, p2->LRSN, p2->SystemType, p2->SGSNChange, p2->NodeId, p2->RNC); #endif } * pOutLChangeLocation = (struct S_LCOMM*)sz; * number = nNumber;notfound: EXEC SQL CLOSE C1; Unlock(); pOut->nFlag = SQL_OK; return 0;notfound2: EXEC SQL CLOSE C2; Unlock(); return 0;sql_error: EXEC SQL CLOSE C1; Unlock(); pOut->nFlag = SQL_RET_ERROR;#ifdef LOG_ERROR snprintf(szMsg, 512, "ORA:DbLCOMMSelect: %.70s", sqlca.sqlerrm.sqlerrmc); logOra(sErrLog, szMsg);#endif EXEC SQL WHENEVER SQLERROR CONTINUE; onError(); return 1;sql_error2: EXEC SQL CLOSE C2; Unlock(); pOut->nFlag = SQL_RET_ERROR;#ifdef LOG_ERROR snprintf(szMsg, 512, "ORA:DbLCOMMSelect: %.70s", sqlca.sqlerrm.sqlerrmc); logOra(sErrLog, szMsg);#endif EXEC SQL WHENEVER SQLERROR CONTINUE; onError();*/ return 2;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -