您的位置:首页 > 数据库 > Oracle

proc 多线程操作oracle

2015-09-30 15:16 1011 查看
直接上代码,代码如下:

1.连接数据库

/*********************************************

函数名: ConnectDB

函数参数:

*ctx
外部要获取的上下文

返回值:

0 连接成功

非0 连接失败

**********************************************/

int ConnectDB(sql_context *ctx)

{

EXEC SQL BEGIN DECLARE SECTION;

char strcon[128] = "\0";

int iRet = 0;

EXEC SQL END DECLARE SECTION;

strcpy(strcon,"SP_IQMS/SP_IQMS@ORCL");

WriteLog(SUCC,"ready connect\n");

//一定要顺序来

EXEC SQL ENABLE THREADS;

EXEC SQL CONTEXT ALLOCATE :*ctx;

EXEC SQL CONTEXT USE :*ctx;

EXEC SQL CONNECT :strcon;

iRet = sqlca.sqlcode;

if(0 == iRet)

{

WriteLog(SUCC,"Conn OK\n");

}

else

{

EXEC SQL CONTEXT FREE :*ctx;

WriteLog(ERROR,"ERROR,%d,%s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);

}

return iRet;

}

2.关闭数据库

/*********************************************

函数名: CloseDB

函数参数:

*ctx
传入的上下文

返回值:

0 关闭成功

非0 关闭失败

**********************************************/

void CloseDB(sql_context *ctx)

{

EXEC SQL CONTEXT USE :*ctx;

EXEC SQL COMMIT WORK RELEASE;

EXEC SQL CONTEXT FREE :*ctx;

if(sqlca.sqlcode != 0)

{

WriteLog(ERROR, "Close oracle fail[%d][%s]\n", sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);

}

else

{

WriteLog(SUCC,"Close!\n");

}

}

3.调用接口(示例)

int QueryTransappno(char* orderno,Str_transrecord* Out_trans)

{

EXEC SQL BEGIN DECLARE SECTION;

sql_context ctx;

int iRet = 0;

EXEC SQL END DECLARE SECTION;

iRet = ConnectDB(&ctx);

if(0 == iRet)

{

EXEC SQL CONTEXT USE :ctx;
//这句一定别漏了

EXEC SQL SELECT DEPTID,AGENCYNO,POSID,FLAG INTO :Out_trans from trans_records where orderno = :orderno;

EXEC SQL WHENEVER SQLERROR STOP;

trim(Out_trans->sDeptId);

trim(Out_trans->sAgencyNo);

trim(Out_trans->sPosId);

trim(Out_trans->sFlag);

WriteLog(SUCC,"返回:%s\n",Out_trans->sAgencyNo);

CloseDB(&ctx);

return 0;

}

else

{

WriteLog(ERROR, "Conn oracle fail[%d][%s]\n", sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);

return -1;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: