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 ;
}

PRO*C 函数事例 2 -- 数据库操作的更多相关文章

  1. PRO*C 函数事例 3 -- 游标使用

    1.Oracle中的游标    Oracle使用两种游标: 显式游标和隐式游标. 不管语句返回多少条记录, Oracle为每条使用的SQL语句隐式地定义一个游标. Oracle为每个DELETE , ...

  2. PRO*C 函数事例 1 -- 数据库连接、事务处理

    1.程序结构        每一个Pro*C程序都包括两部分:(1)应用程序首部:(2)应用程序体        应用程序首部定义了ORACLE数据库的有关变量, 为在C语言中操纵ORACLE数据库做 ...

  3. CI框架常用函数(AR数据库操作的常用函数)

    用户手册地址:http://codeigniter.org.cn/user_guide/index.html 1.查询表记录$this->db->select(); //选择查询的字段$t ...

  4. 一个数据库操作类,适用于Oracle,ACCESS,SQLSERVER

    最近做了一个数据诊断的项目,里面自己写了一个数据库的操作类,包含:连接数据库.读数据表.执行SQL操作,释放数据库等组成,希望对大家有用,由于水平有限,若有错误或者代码不足地方欢迎指正,谢谢. ADO ...

  5. ecshop数据库操作函数

    ecshop数据库操作函数 分类: ecshop和dede2013-09-23 14:02 1716人阅读 评论(0) 收藏 举报 本章我们将结合eschop二次开发一些常见的开发例子.来谈谈ecsh ...

  6. 3、PHP中常用的数据库操作函数解析

    mysql_connect  连接数据库 mysql_select_db 选择需要操作的数据库 mysql_query 执行数据库操作语句 mysql_fetch_array 以数组的形式返回每行查询 ...

  7. 常用的PHP函数封装,有排序和数据库操作函数

    //二分查找 function bin_sch($array, $low, $high, $k) { if ($low <= $high) { $mid = intval(($low + $hi ...

  8. Python常用功能函数系列总结(四)之数据库操作

    本节目录 常用函数一:redis操作 常用函数二:mongodb操作 常用函数三:数据库连接池操作 常用函数四:pandas连接数据库 常用函数五:异步连接数据库 常用函数一:redis操作 # -* ...

  9. [Android Pro] 完美Android Cursor使用例子(Android数据库操作)

    reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...

随机推荐

  1. windows网络模型之重叠IO(完成例程)的使用

    #include <WINSOCK2.H> #include <stdio.h> #define PORT 5150 #define MSGSIZE 1024 #pragma ...

  2. SSD 从形式到实质之改变

    SSD 从形式到实质之改变  作者:廖恒          SSD的物理尺寸之混战正在进行其中. 数据中心的硬件架构师由于要规划下一代server的机械设计.还要制定JBOD的设计规范,想必面临不少困 ...

  3. Sublime Text 插件 【转】

    好厉害,好漂亮. http://www.cnsecer.com/460.html 安装Sublime Text 3插件的方法: 朋友们,小站活着不容易,全靠广告费养着了,如果本文对你有帮助.麻烦动下手 ...

  4. 自定义Powershell提示符

    实现效果: 实现原理: Powershell将个人配置脚本文件的地址存放在$profile变量中, 通过修改该变量达到想要的目的. 实现过程: 1>创建一个新的配置脚本: 2>编辑脚本内容 ...

  5. Jmeter 登陆性能测试

    1.打开Jmeter,新建一个线程组:测试计划--添加--Threads(users)---线程组 如图: 2.首先要添加一个HTTP默认请求,为什么要添加这个呢? 如果要测试的系统域名或者IP地址是 ...

  6. VS Code 中 HTML 文档注释 js 语句异常

    今天用 VS Code 编辑 html 文档时,发现快捷键注释 js 代码显示成 “<!--  …… -->”,怀疑是不是因为安装了某个插件,随后排查出系 Jinja 所致,将其禁用之后就 ...

  7. 【luogu P4137 Rmq Problem / mex】 题解

    题目链接:https://www.luogu.org/problemnew/show/P4137 求区间内最大没出现过的自然数 在add时要先判断会不会对当前答案产生影响,如果有就去找下一个答案. # ...

  8. JDBC Like 参数化查询

    构造SQL 语句: String sql = "select id,name,age,gender,birth from student where name like ?"; 参 ...

  9. An error occurred during the installation of assembly 'Microsoft.VC90.ATL or 'Microsoft.VC80.ATL'

    An error occurred during the installation of assembly 'Microsoft.VC90.ATL or 'Microsoft.VC80.ATL' 下载 ...

  10. Golang 字符串转URLCode

    Golang 字符串转URLCode 最近因调用gitlab API,在生成某些字符串的时候直接请求 gitlab API 失败, url如下: keysURL := "http://192 ...