PRO*C 函数事例 1 -- 数据库连接、事务处理
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 -- 数据库连接、事务处理的更多相关文章
- PRO*C 函数事例 3 -- 游标使用
1.Oracle中的游标 Oracle使用两种游标: 显式游标和隐式游标. 不管语句返回多少条记录, Oracle为每条使用的SQL语句隐式地定义一个游标. Oracle为每个DELETE , ...
- PRO*C 函数事例 2 -- 数据库操作
Pro*C Oracle 的嵌入式开发,数据库处理部分最好能提取到一个模块,按照对不同数据库表的操作分成不同的.pc文件(如 DbsInstStat.pc).将此模块编译成库(c文件编译时链接此库), ...
- C++转C#函数事例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...
- Java数据库连接池封装与用法
Java数据库连接池封装与用法 修改于抄袭版本,那货写的有点BUG,两个类,一个用法 ConnectionPool类: package com.vl.sql; import java.sql.Conn ...
- java实现数据库连接池
package com.kyo.connection; import java.sql.Connection; import java.sql.DatabaseMetaData; import jav ...
- js 函数闭包内部返回函数体调用方法难点解答
今天在网上,看到一篇关于js函数难点的文章,js函数的一些难点.在那上面提了一下,关于js函数返回另一个函数的问题,并附上了一道面试题: var add = function(x){ var sum ...
- 一个经试用效果非常不错的数据库连接池--JAVA
前言: 虽说现在许多企业级的应用服务器均自己带有数据库连接池功能,就连 Tomcat 也支持了这种功能.然而在许多时候,我们还是要使用数据库连接池,如:访问数据库的 Java 桌面应用程序等.这个数据 ...
- Java数据库连接池实现原理
一般来说,Java应用程序访问数据库的过程是: 装载数据库驱动程序: 通过jdbc建立数据库连接: 访问数据库,执行sql语句: 断开数据库连接. public class DBConnection ...
- Java写的数据库连接池
原文地址: http://lgscofield.iteye.com/blog/1820521 import java.sql.*; import java.util.Enumeration; impo ...
随机推荐
- 在VMware上安装ubuntu——网络类型
安装虚拟机时,向导提示选择网络类型: 当使用仅主机模式网络时,虚拟机和物理机不能互相访问共享.
- UVa 1606 - Amphiphilic Carbon Molecules
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- triplet loss
因为待遇低,因为工作不开心,已经严重影响了自己的工作积极性和工作效率,这几天发觉这样对自己实在是一种损失,决定提高工作效率,减少工作时间. 说说最近做的tracking, multi-object t ...
- html基础用法(下)
设计表格: <html> <head> <title>表格</title> <meta charset="utf-8" /&g ...
- 与JSON相关的问题
1.JSON.stringify 与 JSON.parse 相关的问题 JSON.stringify 把字符串转化为字符串,JSON.parse把字符串转化为JSON格式 会出现的问题Unexpect ...
- Unity 游戏框架搭建 (十三) 无需继承的单例的模板
之前的文章中介绍的Unity 游戏框架搭建 (二) 单例的模板和Unity 游戏框架搭建 (三) MonoBehaviour单例的模板有一些问题. 存在的问题: 只要继承了单例的模板就无法再继承其他的 ...
- IntelliJ IDEA使用hibernate
环境:数据库:mariadb 10.2.16 https://downloads.mariadb.org/配置好maven:见收藏的博文链接 https://www.cnblogs.com/ICE_ ...
- 没有美工一样可以获取设计各种各样的UI图
没有美工一样可以获取设计各种各样的UI图 http://www.iconfont.cn
- udt通信java再次升级1.1版
以前完成了udt的java代码测试,功能基本完成,近几天有时间重新梳理了下源码: 对原通信的关闭统一了方法,close定位过时,由shutdown与shutdownNow代替. 将一些主要方法添加了注 ...
- 【TOJ 1743】集合运算(set并、交、差集)
Description 给定两个集合A和B的所有元素,计算它们的交.并.差集. Input 输入数据有多组,第一行为数据的组数T,接下来有2T行,每组数据占2行,每行有若干个整数,第一行的所有整数构成 ...