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

posted @ 2015-03-06 16:31  音弛  阅读(272)  评论(0编辑  收藏  举报