zoukankan      html  css  js  c++  java
  • 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输出

  • 相关阅读:
    Tizen Sample Web Applications
    Linux下RPM软件包的安装及卸载
    libevent
    GTest 运行参数
    【BBC micro:bit基础教程】02-micro:bit与人体运动检测传感器
    【BBC micro:bit基础教程】01-如何用按键控制一个LED
    CMD下查询Mysql中文乱码的解决方法
    php foreach 使用&(与运算符)引用赋值要注意的问题
    sql必知必会(第四版) 学习笔记一
    test
  • 原文地址:https://www.cnblogs.com/uriel/p/4318626.html
Copyright © 2011-2022 走看看