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[ 30 ]; char saPasswd[ 30 ]; char saTnsname[ 30 ]; 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 != 0) { printf ("db not open[%d]\n", sqlca.sqlcode); return -1 ; } return 0; } /* 重新连接数据库 */ int ReOpenDb( ) { int try_num = 0, ret; HtLog (ERROR , "db down\n"); CloseDb ( ); while (1) { printf ("connect to db %dth\n" , try_num); ret = OpenDb ('l'); if (ret == 0) { printf ("connect to db succ\n"); return 0; } CloseDb ( ); sleep (120); try_num ++; if (try_num > 15) break ; } printf ("db not open\n"); return -1 ; } /* 关闭数据库 */ int CloseDb ( ) { EXEC SQL COMMIT WORK RELEASE; return 0 ; } /* 事务回滚 */ int DbsRollBack ( ) { EXEC SQL ROLLBACK WORK; return 0; } /* 事务提交 */ int DbsCommit () { EXEC SQL COMMIT; return 0; }
说明:
运行前需要在.basrc中配置ORACLEUSERID、ORACLEUSERPWD、ORACLETNSNAME 三个环境变量。其中printf部分可以改成T_log、E_log输出