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;
}
}
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;
}
}
相关文章推荐
- oracle常用语法
- ORACLE--Connect By、Level、Start With的使用(Hierarchical query-层次查询)
- [oracle学习笔记]之三:高级查询
- Oracle Net Manager 服务命名配置以及用PL/SQL 登陆数据库
- btrfs管理及应用
- Oracle多行函数/组函数
- Oracle Study之--Oracle 11g RAC故障(Failed to create or upgrade OLR)
- Oracle Study之--Oracle 11g RAC故障(Failed to create or upgrade OLR)
- oracle完整卸载,四步曲
- oracle查看表空间使用情况,更改表空间大小- 查看锁,解锁
- Oracle SQL优化总结
- Oracle Update select
- oracle数据库安装
- Oracle单行函数
- 使用rownum对oracle分页
- oracle----sqlldr用法
- oracle sql函数以及用法
- Switching from Redhat Linux to Oracle Linux in about 5,000 easy steps
- Linux下 oracle 数据库 定时备份
- Oracle之sql追踪