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. Objective-C(装箱和拆箱)

    概述 从前面的博文我们也可以看到,数组和字典中只能存储对象类型,其他基本类型和结构体是没有办法放到数组和字典中的,当然你也是无法给它们发送消息的也就是说有些NSObject的方法是无法调用的,这个时候 ...

  2. LA 4043 最优匹配

    题目链接:https://vjudge.net/contest/161820#problem/A 题意: n 个 白点,n 个黑点,给出了坐标,求完美匹配后,各点不相交,输出白点对于的黑点编号:(输出 ...

  3. 2018.10.31 Mac下的Mysql修改字符编码修改的问题总结

    今天在弄数据库的时候发现存入中文汉字变成了问号,Mac跟windows处理方式不一样. show variables like '%char%'; 查看当前mysql的编码格式 也就是默认编码格式 + ...

  4. Django学习之ORM操作

    一.一般操作 二.必知必会13条 返回QuerySet对象的方法有 特殊的QuerySet 返回具体对象的 返回布尔值的方法有 返回数字的方法 三.单表查询之神奇的双下划线 四.ForeignKey操 ...

  5. Cesium.js学习第二天(立方体)

    var viewer = new Cesium.Viewer('cs'); viewer.entities.add({//图标 position: Cesium.Cartesian3.fromDegr ...

  6. SSM命名规范框架

    文件名 作用 src 根目录,没什么好说的,下面有main和test. main 主要目录,可以放java代码和一些资源文件. java 存放我们的java代码,这个文件夹要使用Build Path ...

  7. mysql(安装、启动、删除)服务

    必须在管理身份下运行 方式一: 安装服务 将 MySQL 安装为服务的方式: "C:\Program Files\MariaDB 10.3\bin\mysqld.exe" inst ...

  8. Dependency Injection in ASP.NET Web API 2 (在web api2 中使用依赖注入)

    原文:http://www.asp.net/web-api/overview/advanced/dependency-injection 1 什么是依赖注入(Dependency Injection) ...

  9. EF执行SQL语句

    使用上下文中的Database.SqlQuery<对应的表名>(sql语句) var data = dbcenter.Database.SqlQuery<CcBusiFormview ...

  10. React Router 4 的使用(2)

    Route Rendering Props 对于给定的路由如何渲染组件,有三种选项:component.render.children.你可以查看 <Route> 的文档来获取更多的信息, ...