论坛徽章: 0
10 可用积分
如下面的程序段:
int Location(char *pszCondition , struct CMSLocalInstInfo *pstCMSLOCALINSTINFO)
{
int idbs_SqlCode ;
EXEC SQL BEGIN DECLARE SECTION ;
char acCondition_l[ 1024 ];
struct EcCmsLocalInstInfo lstCmsLocalInstInfo;
EXEC SQL END DECLARE SECTION ;
memset( acCondition_l , 0 , sizeof(acCondition_l));
sprintf( acCondition_l , "SELECT * FROM %s WHERE %s FOR UPDATE " ,
"tablename", pszCondition );
EXEC SQL PREPARE s1_l FROM :acCondition_l;
if ( sqlca.sqlcode )
{
idbs_SqlCode = sqlca.sqlcode;
return idbs_SqlCode;
}
EXEC SQL DECLARE CMSLocalInstInfo_l_cur CURSOR FOR s1_l;
EXEC SQL OPEN CMSLocalInstInfo_l_cur ;
if ( sqlca.sqlcode )
{
idbs_SqlCode = sqlca.sqlcode;
return idbs_SqlCode;
}
EXEC SQL FETCH CMSLocalInstInfo_l_cur INTO :lstCmsLocalInstInfo; ;
if ( sqlca.sqlcode && sqlca.sqlcode != SQLNOTFOUND )
{
idbs_SqlCode = sqlca.sqlcode;
EXEC SQL CLOSE CMSLocalInstInfo_l_cur;
return idbs_SqlCode;
}
if ( CMSSQLCODE == SQLNOTFOUND )
{
idbs_SqlCode = sqlca.sqlcode;
EXEC SQL CLOSE CMSLocalInstInfo_l_cur;
return idbs_SqlCode;
}
}
int Update(struct CMSLocalInstInfo *pstCMSLOCALINSTINFO)
{
int idbs_SqlCode ;
EXEC SQL BEGIN DECLARE SECTION ;
char acCondition_l[ 1024 ];
struct EcCmsLocalInstInfo lstCmsLocalInstInfo;
EXEC SQL END DECLARE SECTION ;
memcpy ((char *)&lstCmsLocalInstInfo , (char *)pstCMSLOCALINSTINFO,sizeof(CMSLocalInstInfo))
EXEC SQL UPDATE CMSLOCALINSTINFO SET * = :lstCmsLocalInstInfo
WHERE CURRENT of CMSLocalInstInfo_l_cur ;
return sqlca.sqlcode
}
调用顺序为 beginwork-->Location(...) --> Update(...)-->commitwork;
多数都跑得好好的没问题,但偶尔报259或266错,实在查不出来了,请高手帮忙分析下是什么原因?谢谢!
我来回答