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输出