zoukankan      html  css  js  c++  java
  • PRO*C 函数事例 2 数据库操作

          Pro*C Oracle 的嵌入式开发,数据库处理部分最好能提取到一个模块,按照对不同数据库表的操作分成不同的.pc文件(如 DbsInstStat.pc)。
    将此模块编译成库(c文件编译时链接此库),.c文件处理库表时调用对应数据库模块(.pc)中的函数即可。
          函数事例:

    DbsDef.h

    #define DBS_INIT       0
    #define DBS_SELECT     1
    #define DBS_LOCK       2
    #define DBS_UPDATE     3
    #define DBS_DELETE     4
    #define DBS_INSERT     5
    
    #define DBS_CURSOR     11
    #define DBS_OPEN       12
    #define DBS_CLOSE      13
    #define DBS_FETCH      14
    
    #define DBS_UPDATE2    15
    
    #define  SQL_NOT_FOUND_RET(ERR_VAL) \
        if( sqlca.sqlcode == 1403 ) \
        {\
            HtLog( ERROR , "error code [%d], reason[%s] \n", \
                sqlca.sqlcode, ( char * )sqlca.sqlerrm.sqlerrmc ) ; \
            strcpy( gPubStru.saBankRespCode, ERR_VAL ) ; \
            return -1; \
        }
    
    #define  SQL_ERR_RET( ) \
        if( sqlca.sqlcode != 0 ) \
        {\
            HtLog( ERROR , "SQL ERROR code [%d], reason[%s] \n", \
                sqlca.sqlcode, ( char * )sqlca.sqlerrm.sqlerrmc ); \
            strcpy( gPubStru.saBankRespCode, SQL_ERR ) ; \
            return -1 ; \
        }
    
    #define  SQL_ERR_RET2( ) \
        if( sqlca.sqlcode != 0 && sqlca.sqlcode != 1403) \
        {\
            HtLog( ERROR , "SQL ERROR code [%d], reason[%s] \n", \
                sqlca.sqlcode, ( char * )sqlca.sqlerrm.sqlerrmc ); \
            strcpy( gPubStru.saBankRespCode, SQL_ERR ) ; \
            return -1 ; \
        }

    DbsInstStat.pc

    #include "public.h"
    #include "errlog.h"
    #include "DbsDef.h"
    #include "my_sys.h"
    
    
    EXEC SQL INCLUDE sqlda;
    EXEC SQL INCLUDE sqlca;
    
    EXEC SQL BEGIN DECLARE SECTION;
        char    saInstCode[11 + 1];
        char    saInstHsmIndex [3 + 1];
        char    saInstPrimKey [32 + 1];
        char    saInstPinKey [32 + 1];
        char    saInstMacKey [32 + 1];
        char    saInstStat [1 + 1];
    EXEC SQL END DECLARE SECTION;
    
    
    int DbsTblInstStat (int nOpr)
    {
        /***********
        * 参数初始化
        ************/
        memset (saInstCode, 0x00, sizeof(saInstCode));
        memset (saInstHsmIndex, 0x00, sizeof(saInstHsmIndex));
        memset (saInstPrimKey, 0x00, sizeof(saInstPrimKey));
        memset (saInstPinKey, 0x00, sizeof(saInstPinKey));
        memset (saInstMacKey, 0x00, sizeof(saInstMacKey));
        memset (saInstStat, 0x00, sizeof(saInstStat));
    
        memcpy (saInstCode, gPubStru.saFwdInstIdCode, 8);
        trimspace (saInstCode);
    
    
        /***********
        * 数据处理
        ************/
        switch (nOpr)
        {
        case DBS_SELECT:
            EXEC SQL
                SELECT INST_HSM_INDEX, INST_PRIM_KEY, nvl(INST_PIN_KEY, ' '), nvl(INST_MAC_KEY, ' '), INST_STAT
                INTO :saInstHsmIndex, :saInstPrimKey, :saInstPinKey, :saInstMacKey, :saInstStat
                FROM TBL_INST_STAT
                WHERE INST_CODE = :saInstCode;
    
                SQL_NOT_FOUND_RET2 ( );
                SQL_ERR_RET2 ( );
    
            /******************
            * 保存数据到内部IPC
            *******************/
            memcpy (gPubStru.saInstHsmIndex, saInstHsmIndex, 4);
            memcpy (gPubStru.saInstMainKey, saInstPrimKey, 32);
            memcpy (gPubStru.saPinKey, saInstPinKey, 32);
            memcpy (gPubStru.saMacKey, saInstMacKey, 32);
            memcpy (gPubStru.saInstStat, saInstStat, 1);
            
            break;
        case DBS_UPDATE:
            EXEC SQL
                UPDATE TBL_INST_STAT SET INST_STAT = 'Y'
                WHERE INST_CODE = :saInstCode;
    
                SQL_NOT_FOUND_RET2 ( );
                SQL_ERR_RET2( )
    
            break;
        case DBS_UPDATE2:
            memcpy (saInstMacKey, gPubStru.saMacKey1, 16);
    
            EXEC SQL
                UPDATE TBL_INST_STAT SET INST_MAC_KEY = :saInstMacKey
                WHERE INST_CODE = :saInstCode;
    
                SQL_NOT_FOUND_RET2 ( );
                SQL_ERR_RET2( )
    
            break;
        default:
            break;
        }
    
    
        return 0;
    }
  • 相关阅读:
    Activemq安装
    Python小代码_12_生成前 n 行杨辉三角
    Python小代码_11_生成小于 n 的裴波那契数列
    Python小代码_10_判断是否为素数
    Python小代码_9_求水仙花数
    Python小代码_8_今天是今年的第几天
    Python小代码_7_字符串的字符次数统计
    Python小代码_6_列表推导式求 100 以内的所有素数
    Python小代码_5_二维矩阵转置
    关于列表元素的删除
  • 原文地址:https://www.cnblogs.com/uriel/p/4318765.html
Copyright © 2011-2022 走看看