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. Android进阶笔记09:Android 万能适配器

    1. Android 万能适配器      项目中Listview GridView几乎是必用的组件,Android也提供一套机制,为这些控件绑定数据,那就是Adapter.用起来虽然还不错,但每次都 ...

  2. Android(java)学习笔记45:深入分析Java ClassLoader原理

    1. 前言: Android中的动态加载机制能更好的优化我们的应用,同时实现动态的更新,这就便于我们管理我们的应用,通过插件化来减轻我们的内存以及CPU消耗,在不发布新版本的情况下能更新某些模块. 当 ...

  3. intellij 无法导入 SimpleTagSupport问题

    主要原因还是导包问题: 需要导入2个包: 之前,我只导入 servlet-api.jar ,总是报错,最后导入jsp-api.jar后,才成功可以继承!

  4. ACM-ICPC 2017 Asia HongKong 解题报告

    ACM-ICPC 2017 Asia HongKong 解题报告 任意门:https://nanti.jisuanke.com/?kw=ACM-ICPC%202017%20Asia%20HongKon ...

  5. 使用vue搭建项目(创建手脚架)

    第一步:切换到创建的目录 创建项目 vue cerate [model] 第二步:切换到创建好的项目,然后创建element vue add element 第三步:创建router vue add ...

  6. PL/SQL知识点

    1.ROW_NUMBER() OVER(PARTITION BY XXX ORDER BY XXX) SELECT STP.FLOW_INST_ID, BUU.USER_NAME, ORGG.NAME ...

  7. 轻量ORM-SqlRepoEx (二)初始化SqlRepoEx

    一.SqlRepoEx引用 暂时没放至nuget上,可以直接到https://github.com/AzThinker/SqlRepoEx下载源码,编译引用. (一).静态引用 1.需引用以下dll在 ...

  8. Evercookie

    1. Evercookie Evercookie是一个Javascript API,可以在浏览器中生成极其持久的cookie. 它的目标是在客户删除标准cookie,Flash cookie(本地共享 ...

  9. CommonJs模块规范

    1.什么是模块化 文件作用域 通信规则 加载 require 导出 exports 2.CommonJs模块规范 在Node中的Javascript还有一个很重要的概念:模块概念 模块作用域 使用re ...

  10. ABAP术语-Interface

    Interface 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/22/1077086.html Information tool that ...