1、程序结构
        每一个Pro*C程序都包括两部分:(1)应用程序首部;(2)应用程序体
        应用程序首部定义了ORACLE数据库的有关变量, 为在C语言中操纵ORACLE数据库做好了准备。应用程序体基本上由Pro*C的SQL语句调用组成。
主要指查询SELECT、INSERT、UPDATE、DELETE等语句。
        应用程序的组成结构如图所示:
      
2、函数事例

EXEC SQL INCLUDE sqlca ;
#include "my_sys.h"
#include "errlog.h" /* 连接数据库 */
int OpenDb (char db_type)
{
EXEC SQL BEGIN DECLARE SECTION;
char saUser[ ];
char saPasswd[ ];
char saTnsname[ ];
EXEC SQL END DECLARE SECTION; /***********
* 联机数据库
************/
strcpy (saUser, getenv ("ORACLEUSERID"));
strcpy (saPasswd, getenv ("ORACLEUSERPWD"));
strcpy (saTnsname, getenv ("ORACLETNSNAME")); EXEC SQL CONNECT :saUser IDENTIFIED BY :saPasswd USING :saTnsname;
if (sqlca.sqlcode != )
{
printf ("db not open[%d]\n", sqlca.sqlcode);
return - ;
} return ;
} /* 重新连接数据库 */
int ReOpenDb( )
{
int try_num = , ret; HtLog (ERROR , "db down\n");
CloseDb ( ); while ()
{
printf ("connect to db %dth\n" , try_num);
ret = OpenDb ('l');
if (ret == )
{
printf ("connect to db succ\n");
return ;
}
CloseDb ( );
sleep ();
try_num ++;
if (try_num > )
break ;
} printf ("db not open\n"); return - ;
} /* 关闭数据库 */
int CloseDb ( )
{
EXEC SQL COMMIT WORK RELEASE; return ;
} /* 事务回滚 */
int DbsRollBack ( )
{
EXEC SQL ROLLBACK WORK; return ;
} /* 事务提交 */
int DbsCommit ()
{
EXEC SQL COMMIT; return ;
}

说明:
       运行前需要在.basrc中配置ORACLEUSERID、ORACLEUSERPWD、ORACLETNSNAME 三个环境变量。其中printf部分可以改成T_log、E_log输出

PRO*C 函数事例 1 -- 数据库连接、事务处理的更多相关文章

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

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

  2. PRO*C 函数事例 2 -- 数据库操作

    Pro*C Oracle 的嵌入式开发,数据库处理部分最好能提取到一个模块,按照对不同数据库表的操作分成不同的.pc文件(如 DbsInstStat.pc).将此模块编译成库(c文件编译时链接此库), ...

  3. C++转C#函数事例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...

  4. Java数据库连接池封装与用法

    Java数据库连接池封装与用法 修改于抄袭版本,那货写的有点BUG,两个类,一个用法 ConnectionPool类: package com.vl.sql; import java.sql.Conn ...

  5. java实现数据库连接池

    package com.kyo.connection; import java.sql.Connection; import java.sql.DatabaseMetaData; import jav ...

  6. js 函数闭包内部返回函数体调用方法难点解答

    今天在网上,看到一篇关于js函数难点的文章,js函数的一些难点.在那上面提了一下,关于js函数返回另一个函数的问题,并附上了一道面试题: var add = function(x){ var sum ...

  7. 一个经试用效果非常不错的数据库连接池--JAVA

    前言: 虽说现在许多企业级的应用服务器均自己带有数据库连接池功能,就连 Tomcat 也支持了这种功能.然而在许多时候,我们还是要使用数据库连接池,如:访问数据库的 Java 桌面应用程序等.这个数据 ...

  8. Java数据库连接池实现原理

    一般来说,Java应用程序访问数据库的过程是: 装载数据库驱动程序: 通过jdbc建立数据库连接: 访问数据库,执行sql语句: 断开数据库连接. public class DBConnection ...

  9. Java写的数据库连接池

    原文地址: http://lgscofield.iteye.com/blog/1820521 import java.sql.*; import java.util.Enumeration; impo ...

随机推荐

  1. python入门1 python手动编译py_compile,compileall

    python运行之后会自动生产pyc文件,也可以手动编译生成pyc文件.代码如下: #coding:utf-8 """ 2018-11-03 dinghanhua 手动编 ...

  2. python:pymysql模块使用

    一,基本使用 # 导入pymysql模块 import pymysql # 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,p ...

  3. POJ 1423 斯特林

    题意:进制问题 分析: 打表,但是要用不能 long long 型,超内存. n! = log_{10}\sqrt{2{\pi}n}*(\frac{n}e)^n 精度要求 #include <c ...

  4. react中 props,state与render函数的关系

    我们很明显的能够感受到,react是一门数据驱动的框架,当数据发生变化,页面就会自动发生变化,他背后的原理是怎么样子的呢 比如todolist例子里面,inputValue变了,框里面的内容就会自动变 ...

  5. luogu P3787 冰精冻西瓜

    嘟嘟嘟 好题,好题…… 看这个修改和询问,就知道要么是求完dfs序后线段树维护,要么是树剖.又因为这道题都是子树的操作,没有链上的,所以线段树就够了. 然而重点不是这个.这道题最麻烦的是线段树push ...

  6. Python-time和datetime模块

    一.time模块 1.表示时间的三种方式 >>> import time >>> time.time() #当前时间戳 1509525556.8485825 > ...

  7. java实现按拼音排序

    List<WaPayFileVO> list =(List<WaPayFileVO>) dao.execQueryBeanList(pagesql, params.toArra ...

  8. 手写数字识别的k-近邻算法实现

    (本文为原创,请勿在未经允许的情况下转载) 前言 手写字符识别是机器学习的入门问题,k-近邻算法(kNN算法)是机器学习的入门算法.本文将介绍k-近邻算法的原理.手写字符识别问题分析.手写字符识别的k ...

  9. Python—XML

    什么是xml XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被 ...

  10. Python学习之路——文件操作

    文件操作分三步:打开文件,读写文件,关闭文件.读取操作时没有给read函数加括号,会出现下面这样的车祸 >>> data = open('/home/supersun/Documen ...