//文件1:cust_function.c
……
int isTrue = 0;
char sql_string[ 1024] = "" ;
sprintf( sql_string , "插入语句" );printf("AAA\n");isTrue= access_oracle_DB( sql_string );printf("CCC\n");
……//文件2:cust_access_oracle.cextern int access_oracle_DB( char * sMsg )
{
int i;
int errNo = 0;
char sqlcmd[256]="";
text errInfo[1024];
MY_OCI_CONTEXT_T ociCtx; i = oci_init(&ociCtx); //初始化链接 TC_write_syslog("[DEBUG] access_oracle_DB oci_init=%d\n",i); strcpy(sqlcmd,sMsg);dd
oci_perform_data(&ociCtx,1110,sqlcmd); //执行update/insert/delete sql语句
if( i == 1 )
{
i = oci_clean(&ociCtx);
}
else
{
(void)OCIErrorGet ((dvoid*) ociCtx.ErrHP, (ub4) 1, (text *) NULL, &errNo,
errInfo, (ub4)sizeof(errInfo)-1, (ub4) OCI_HTYPE_ERROR);
TC_write_syslog("[DEBUG] ErroNO=%d\nerrInfor=%s\n", errNo, errInfo);
TC_write_syslog("[DEBUG] SQLcmd=%s\n", sqlcmd);
}printf("BBB\n")
return 0;
}static int oci_perform_data(MY_OCI_CONTEXT_T* ociCtx_p,int pid,char * sMsg)
{
char sqlcmd[1024]="";
sword retcode;
char pointName[30];
pointName[29]='\0'; //生成sql语句
strcpy(sqlcmd,sMsg);
printf("[DEBUG] sqlcmd=%s \n",sqlcmd);
//准备SQL语句
retcode = OCIStmtPrepare (ociCtx_p->StmtHP, ociCtx_p->ErrHP, (unsigned char *)sqlcmd,
(ub4)strlen((char *)sqlcmd),
(ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT
);
printf("[DEBUG] OCIStmtPrepare \n");
if(retcode!=OCI_SUCCESS)
{
TC_write_syslog("[DEBUG] Error OCIStmtPrepare \n");
printf("error OCIStmtPrepare \n");
return -1;
} //执行SQL语句
retcode=OCIStmtExecute(ociCtx_p->SvcHP, ociCtx_p->StmtHP, ociCtx_p->ErrHP, (ub4) 1, (ub4) 0,
(CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT );printf("[DEBUG] OCIStmtExecute\n");
//查错
if(retcode!=OCI_SUCCESS)
{
int errNo = 0;
retcode = OCIErrorGet ((dvoid*) ociCtx_p->ErrHP, (ub4) 1, (text *) NULL, &errNo,
(text*)pointName, (ub4)sizeof(pointName)-1, (ub4) OCI_HTYPE_ERROR); TC_write_syslog("[DEBUG] Error OCIStmtExecute No=%d Info=%s \n", errNo, pointName);
printf("Error OCIStmtExecute No=%d Info=%s \n", errNo, pointName);
return -1;
}
retcode = OCITransCommit(ociCtx_p->SvcHP, ociCtx_p->ErrHP, 0);
printf("[DEBUG] OCITransCommit\n");
if(retcode!=OCI_SUCCESS)
{
TC_write_syslog("[DEBUG] SQL statement TransCommit failed[%d]:%s\n",retcode,sqlcmd);
printf("SQL statement TransCommit failed[%d]:%s\n",retcode,sqlcmd);
return -1;
}
return 1;
}这段代码的意思是在cust_function.c文件中构造一条sql语句,然后调用cust_access_oracle.c中的函数来执行,可是现在的问题是,输出语句"AAA"、“BBB”都正常输出,可是“CCC”就是不执行,oci_perform_data函数中的输出也都正常输出了,没有报错,请高手们帮着看看,实在搞不懂了!!!!!!
上面的代码,是C访问Oracle的代码,朋友们可以做个参考。
有要分的朋友吗,一会结贴,回贴就有分啊!