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

转载于:https://www.cnblogs.com/uriel/p/4318626.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
const { DBPost } = require("../../db/DBPost"); // pages/post-detail/post-detail.js Page({ /** * 页面的初 zx始数据 */ data: { }, /** * 生命周期函数--监听页面加载 */ onLoad:function(options) { var postId=options.id; this.dbPost=new DBPost(postId); this.postData=this.dbPost.getPostItemById().data; this.setData({ post:this.postData }) }, onReady:function(){ wx.setNavigationBarTitle({ title: this.postData.title }) }, onCollectionTap:function(event){ var newData = this.dbPost.collect(); this.setData({ 'post.collectionStatus':newData.collectionStatus, 'post.collectionNum':newData.collectionNum }) wx.showToast({ title:newData.collectionStatus?"收藏成功":"取消成功", duration:1000, icon:"success", mask:true }) }, onUpTap:function(evenet){ var newData=this.dbPost.up(); this.setData({ 'post.upStatus':newData.upStatus, 'post.upNum':newData.upNum }) }, onCommentTap:function(event){ var id = event.currentTarget.dataset.postId; wx.navigateTo({ url: '../post/post-comment/post-comment?id=' +id }) }, /** * 生命周期函数--监听页面初次渲染完成 */ /** * 生命周期函数--监听页面显示 */ onShow() { }, /** * 生命周期函数--监听页面隐藏 */ onHide() { }, /** * 生命周期函数--监听页面卸载 */ onUnload() { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh() { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom() { }, /** * 用户点击右上角分享 */ onShareAppMessage() { } })分析代码
最新发布
06-02

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值