PRO*C 函数事例 2 -- 数据库操作
2024-09-03 03:25:15
Pro*C Oracle 的嵌入式开发,数据库处理部分最好能提取到一个模块,按照对不同数据库表的操作分成不同的.pc文件(如 DbsInstStat.pc)。
将此模块编译成库(c文件编译时链接此库),.c文件处理库表时调用对应数据库模块(.pc)中的函数即可。
函数事例:
DbsDef.h
#define DBS_INIT 0
#define DBS_SELECT 1
#define DBS_LOCK 2
#define DBS_UPDATE 3
#define DBS_DELETE 4
#define DBS_INSERT 5 #define DBS_CURSOR 11
#define DBS_OPEN 12
#define DBS_CLOSE 13
#define DBS_FETCH 14 #define DBS_UPDATE2 15 #define SQL_NOT_FOUND_RET(ERR_VAL) \
if( sqlca.sqlcode == ) \
{\
HtLog( ERROR , "error code [%d], reason[%s] \n", \
sqlca.sqlcode, ( char * )sqlca.sqlerrm.sqlerrmc ) ; \
strcpy( gPubStru.saBankRespCode, ERR_VAL ) ; \
return -; \
} #define SQL_ERR_RET( ) \
if( sqlca.sqlcode != ) \
{\
HtLog( ERROR , "SQL ERROR code [%d], reason[%s] \n", \
sqlca.sqlcode, ( char * )sqlca.sqlerrm.sqlerrmc ); \
strcpy( gPubStru.saBankRespCode, SQL_ERR ) ; \
return - ; \
} #define SQL_ERR_RET2( ) \
if( sqlca.sqlcode != && sqlca.sqlcode != ) \
{\
HtLog( ERROR , "SQL ERROR code [%d], reason[%s] \n", \
sqlca.sqlcode, ( char * )sqlca.sqlerrm.sqlerrmc ); \
strcpy( gPubStru.saBankRespCode, SQL_ERR ) ; \
return - ; \
}
DbsInstStat.pc
#include "public.h"
#include "errlog.h"
#include "DbsDef.h"
#include "my_sys.h" EXEC SQL INCLUDE sqlda;
EXEC SQL INCLUDE sqlca; EXEC SQL BEGIN DECLARE SECTION;
char saInstCode[ + ];
char saInstHsmIndex [ + ];
char saInstPrimKey [ + ];
char saInstPinKey [ + ];
char saInstMacKey [ + ];
char saInstStat [ + ];
EXEC SQL END DECLARE SECTION; int DbsTblInstStat (int nOpr)
{
/***********
* 参数初始化
************/
memset (saInstCode, 0x00, sizeof(saInstCode));
memset (saInstHsmIndex, 0x00, sizeof(saInstHsmIndex));
memset (saInstPrimKey, 0x00, sizeof(saInstPrimKey));
memset (saInstPinKey, 0x00, sizeof(saInstPinKey));
memset (saInstMacKey, 0x00, sizeof(saInstMacKey));
memset (saInstStat, 0x00, sizeof(saInstStat)); memcpy (saInstCode, gPubStru.saFwdInstIdCode, );
trimspace (saInstCode); /***********
* 数据处理
************/
switch (nOpr)
{
case DBS_SELECT:
EXEC SQL
SELECT INST_HSM_INDEX, INST_PRIM_KEY, nvl(INST_PIN_KEY, ' '), nvl(INST_MAC_KEY, ' '), INST_STAT
INTO :saInstHsmIndex, :saInstPrimKey, :saInstPinKey, :saInstMacKey, :saInstStat
FROM TBL_INST_STAT
WHERE INST_CODE = :saInstCode; SQL_NOT_FOUND_RET2 ( );
SQL_ERR_RET2 ( ); /******************
* 保存数据到内部IPC
*******************/
memcpy (gPubStru.saInstHsmIndex, saInstHsmIndex, );
memcpy (gPubStru.saInstMainKey, saInstPrimKey, );
memcpy (gPubStru.saPinKey, saInstPinKey, );
memcpy (gPubStru.saMacKey, saInstMacKey, );
memcpy (gPubStru.saInstStat, saInstStat, ); break;
case DBS_UPDATE:
EXEC SQL
UPDATE TBL_INST_STAT SET INST_STAT = 'Y'
WHERE INST_CODE = :saInstCode; SQL_NOT_FOUND_RET2 ( );
SQL_ERR_RET2( ) break;
case DBS_UPDATE2:
memcpy (saInstMacKey, gPubStru.saMacKey1, ); EXEC SQL
UPDATE TBL_INST_STAT SET INST_MAC_KEY = :saInstMacKey
WHERE INST_CODE = :saInstCode; SQL_NOT_FOUND_RET2 ( );
SQL_ERR_RET2( ) break;
default:
break;
} return ;
}
最新文章
- 移动应用开发测试工具Bugtags集成和使用教程
- js中创建数组的方法
- 设计模式之美:Command(命令)
- Android 图片的裁剪与相机调用
- 路由器 NorFlash与NandFlash区别
- Apache22中配置虚拟主机(Apache VirtualHost)
- 保存恢复临时信-Android 中使用onSaveInstanceState和onRestoreInstanceState
- Leetcode049. Group Anagrams
- powerdesigner jdbc 连接 oracle
- Xcode7网络问题
- Oberon相关资源
- _1_html_
- angularjs 利用$http 请求出现 400 Bad Request
- JPA实体类注解、springboot测试类、lombok的使用
- [dpdk][sysfs][pci] 在dpdk程序中操纵PCI设备
- KMS服务器激活WIN方法
- tmux入门
- [svc]inotify+rsync解决nfs单点问题
- c++四舍五入的新方法
- vue 将值存储到vuex 报错问题