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;
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。