📄 db.pc
字号:
#define __PROC_C__
#include "db.h"
#undef __PROC_C__
/* 包含SQL通讯区变量 */
EXEC SQL INCLUDE sqlca;
/* RELEASE_CURSOR=YES 使PROC 在执行完后释放与嵌入SQL有关资源 */
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
/* 全局说明段 */
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR db_name[32 + 1];
VARCHAR db_user[32 + 1];
VARCHAR db_pass[32 + 1];
VARCHAR db_name2[32 + 1];
VARCHAR db_user2[32 + 1];
VARCHAR db_pass2[32 + 1];
VARCHAR db_link2[32 + 1];
EXEC SQL END DECLARE SECTION;
/* 数据库是否连接成功的标志 */
int g_DBConnected = 0;
int g_DBConnected2 = 0;
/* 连接数据库 */
int DBConnect(const char *DBName, const char *DBUser, const char *DBPass)
{
/* 局部sqlca说明 */
struct sqlca sqlca;
/* 返回值定义 */
int ret;
/* 将形式参数赋到全局说明段中相应变量中 */
memset(db_name.arr, 0, sizeof(db_name.arr));
strncpy(db_name.arr, DBName, sizeof(db_name.arr) - 1);
db_name.len = strlen(db_name.arr);
memset(db_user.arr, 0, sizeof(db_user.arr));
strncpy(db_user.arr, DBUser, sizeof(db_user.arr) - 1);
db_user.len = strlen(db_user.arr);
memset(db_pass.arr, 0, sizeof(db_pass.arr));
strncpy(db_pass.arr, DBPass, sizeof(db_pass.arr) - 1);
db_pass.len = strlen(db_pass.arr);
/* 执行连接数据库的SQL语句 */
EXEC SQL CONNECT :db_user IDENTIFIED BY :db_pass USING :db_name;
/* 判断SQL语句执行结果 */
if (sqlca.sqlcode == 0)
{
g_DBConnected = 1;
ret = 0;
}
else if (sqlca.sqlcode > 0)
{
ret = -1;
}
else
{
ret = -1;
}
return ret;
}
/* 重连数据库 */
int DBReconnect()
{
/* 局部sqlca说明 */
struct sqlca sqlca;
/* 返回值定义 */
int ret;
/* 执行连接数据库的SQL语句 */
EXEC SQL CONNECT :db_user IDENTIFIED BY :db_pass USING :db_name;
/* 判断SQL语句执行结果 */
if (sqlca.sqlcode == 0)
{
g_DBConnected = 1;
ret = 0;
}
else if (sqlca.sqlcode > 0)
{
ret = -1;
}
else
{
ret = -1;
}
return ret;
}
/* 断开数据库连接 */
int DBDisconnect()
{
/* 局部sqlca说明 */
struct sqlca sqlca;
/* 返回值定义 */
int ret;
/* 释放操作 */
EXEC SQL COMMIT WORK RELEASE;
/* 判断SQL语句执行结果 */
if (sqlca.sqlcode == 0)
{
ret = 0;
}
else if (sqlca.sqlcode > 0)
{
ret = -1;
}
else
{
ret = -1;
}
g_DBConnected = 0;
return ret;
}
/* 连接数据库2 */
int DBConnect2(const char *DBName, const char *DBUser, const char *DBPass)
{
/* 局部sqlca说明 */
struct sqlca sqlca;
/* 返回值定义 */
int ret;
/* 将形式参数赋到全局说明段中相应变量中 */
memset(db_name2.arr, 0, sizeof(db_name2.arr));
strncpy(db_name2.arr, DBName, sizeof(db_name2.arr) - 1);
db_name2.len = strlen(db_name2.arr);
memset(db_user2.arr, 0, sizeof(db_user2.arr));
strncpy(db_user2.arr, DBUser, sizeof(db_user2.arr) - 1);
db_user2.len = strlen(db_user2.arr);
memset(db_pass2.arr, 0, sizeof(db_pass2.arr));
strncpy(db_pass2.arr, DBPass, sizeof(db_pass2.arr) - 1);
db_pass2.len = strlen(db_pass2.arr);
memset(db_link2.arr, 0, sizeof(db_link2.arr));
snprintf(db_link2.arr, sizeof(db_link2.arr) - 1, "%s_2", DBName);
db_link2.len = strlen(db_link2.arr);
/* 执行连接数据库的SQL语句 */
EXEC SQL CONNECT :db_user2 IDENTIFIED BY :db_pass2 AT :db_link2 USING :db_name2;
/* 判断SQL语句执行结果 */
if (sqlca.sqlcode == 0)
{
g_DBConnected2 = 1;
ret = 0;
}
else if (sqlca.sqlcode > 0)
{
ret = -1;
}
else
{
ret = -1;
}
return ret;
}
/* 重连数据库2 */
int DBReconnect2()
{
/* 局部sqlca说明 */
struct sqlca sqlca;
/* 返回值定义 */
int ret;
/* 执行连接数据库的SQL语句 */
EXEC SQL CONNECT :db_user2 IDENTIFIED BY :db_pass2 AT :db_link2 USING :db_name2;
/* 判断SQL语句执行结果 */
if (sqlca.sqlcode == 0)
{
g_DBConnected2 = 1;
ret = 0;
}
else if (sqlca.sqlcode > 0)
{
ret = -1;
}
else
{
ret = -1;
}
return ret;
}
/* 断开数据库连接2 */
int DBDisconnect2()
{
/* 局部sqlca说明 */
struct sqlca sqlca;
/* 返回值定义 */
int ret;
/* 释放操作 */
EXEC SQL AT :db_link2 COMMIT WORK RELEASE;
/* 判断SQL语句执行结果 */
if (sqlca.sqlcode == 0)
{
ret = 0;
}
else if (sqlca.sqlcode > 0)
{
ret = -1;
}
else
{
ret = -1;
}
g_DBConnected2 = 0;
return ret;
}
int DBCreateMonBill(const char *TabName_IN, const char *DatePrefix_IN)
{
struct sqlca sqlca;
int ret;
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR TabName[32];
VARCHAR DatePrefix[16];
EXEC SQL END DECLARE SECTION;
memset(TabName.arr, 0, sizeof(TabName.arr));
strncpy(TabName.arr, TabName_IN, sizeof(TabName.arr) - 1);
TabName.len = strlen(TabName.arr);
memset(DatePrefix.arr, 0, sizeof(DatePrefix.arr));
strncpy(DatePrefix.arr, DatePrefix_IN, sizeof(DatePrefix.arr) - 1);
DatePrefix.len = strlen(DatePrefix.arr);
if(g_DBConnected != 1)
{
return -1;
}
EXEC SQL EXECUTE
BEGIN
writebill_proc(:TabName, :DatePrefix);
END;
END-EXEC;
return 0;
}
int DBGetUserToBill(const char *TabName, BILL_ITEM *pbill_item_out)
{
struct sqlca sqlca;
int ret, nCount;
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR sqlstr[512];
VARCHAR Tel[20 + 1];
VARCHAR City[20 + 1];
long FeeValue;
EXEC SQL END DECLARE SECTION;
if(g_DBConnected != 1)
{
return -1;
}
memset(sqlstr.arr, 0, sizeof(sqlstr.arr));
snprintf(sqlstr.arr, sizeof(sqlstr.arr) - 1, "SELECT Tel, City, FeeValue FROM %s WHERE SendFlag = 0 and UserType = 0", TabName);
sqlstr.len = strlen(sqlstr.arr);
EXEC SQL PREPARE s1 FROM :sqlstr;
EXEC SQL DECLARE DBGetUserToBill_cursor CURSOR FOR s1;
EXEC SQL OPEN DBGetUserToBill_cursor;
if (sqlca.sqlcode != 0)
{
return -1;
}
nCount = 0;
while (nCount < MAX_BILL_ITEM_NUM)
{
memset(Tel.arr, 0, sizeof(Tel.arr));
Tel.len = 0;
memset(City.arr, 0, sizeof(City.arr));
City.len = 0;
FeeValue = 0;
EXEC SQL FETCH DBGetUserToBill_cursor INTO :Tel, :City, :FeeValue;
if (sqlca.sqlcode == 1403)
{
break;
}
Tel.arr[Tel.len] = '\0';
City.arr[City.len] = '\0';
strncpy(pbill_item_out[nCount].Tel, Tel.arr, 20);
strncpy(pbill_item_out[nCount].City, City.arr, 20);
pbill_item_out[nCount].FeeValue = FeeValue;
nCount++;
}
EXEC SQL CLOSE DBGetUserToBill_cursor;
return nCount;
}
int DBSetMonthBillOnce(const char *TabName, const char *Tel_in, const unsigned long *Seq_in)
{
struct sqlca sqlca;
int ret;
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR sqlstr[512];
VARCHAR Tel[20 + 1];
unsigned long Seq1;
unsigned long Seq2;
unsigned long Seq3;
EXEC SQL END DECLARE SECTION;
memset(Tel.arr, 0, sizeof(Tel.arr));
strncpy(Tel.arr, Tel_in, sizeof(Tel.arr) - 1);
Tel.len = strlen(Tel.arr);
Seq1 = Seq_in[0];
Seq2 = Seq_in[1];
Seq3 = Seq_in[2];
memset(sqlstr.arr, 0, sizeof(sqlstr.arr));
snprintf(sqlstr.arr, sizeof(sqlstr.arr) - 1, "UPDATE %s SET SendFlag = 1, SPSeq1 = :v1, SPSeq2 = :v2, SPSeq3 = :v3 WHERE Tel = :v4", TabName);
sqlstr.len = strlen(sqlstr.arr);
if(g_DBConnected != 1)
{
return -1;
}
EXEC SQL PREPARE s2 FROM :sqlstr;
EXEC SQL EXECUTE s2 USING :Seq1, :Seq2, :Seq3, :Tel;
if(sqlca.sqlcode == 0)
{
EXEC SQL COMMIT WORK;
ret = 0;
}
else if(sqlca.sqlcode > 0)
{
ret = -1;
}
else
{
if(sqlca.sqlcode == -3113 || sqlca.sqlcode == -3114)
{
g_DBConnected = 0;
}
EXEC SQL ROLLBACK WORK;
ret = -1;
}
return ret;
}
int DBSetReportState(const char *TabName, const char *Tel_in, const int ReportState_in, const int ReportErrorCode_in)
{
struct sqlca sqlca;
int ret;
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR sqlstr[512];
VARCHAR Tel[20 + 1];
int ReportState;
int ReportErrorCode;
EXEC SQL END DECLARE SECTION;
memset(Tel.arr, 0, sizeof(Tel.arr));
strncpy(Tel.arr, Tel_in, sizeof(Tel.arr) - 1);
Tel.len = strlen(Tel.arr);
ReportState = ReportState_in;
ReportErrorCode = ReportErrorCode_in;
memset(sqlstr.arr, 0, sizeof(sqlstr.arr));
snprintf(sqlstr.arr, sizeof(sqlstr.arr) - 1, "UPDATE %s SET ReportState = :v1, ReportErrorCode = :v2 WHERE Tel = :v3", TabName);
sqlstr.len = strlen(sqlstr.arr);
if(g_DBConnected != 1)
{
return -1;
}
EXEC SQL PREPARE s3 FROM :sqlstr;
EXEC SQL EXECUTE s3 USING :ReportState, :ReportErrorCode, :Tel;
if(sqlca.sqlcode == 0)
{
EXEC SQL COMMIT WORK;
ret = 0;
}
else if(sqlca.sqlcode > 0)
{
ret = -1;
}
else
{
if(sqlca.sqlcode == -3113 || sqlca.sqlcode == -3114)
{
g_DBConnected = 0;
}
EXEC SQL ROLLBACK WORK;
ret = -1;
}
return ret;
}
int DBIsSzInfoUser(const char *Tel_in)
{
struct sqlca sqlca;
int ret;
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR Tel[20 + 1];
VARCHAR UserNo[20 + 1];
EXEC SQL END DECLARE SECTION;
memset(Tel.arr, 0, sizeof(Tel.arr));
strncpy(Tel.arr, Tel_in, sizeof(Tel.arr) - 1);
Tel.len = strlen(Tel.arr);
memset(UserNo.arr, 0, sizeof(UserNo.arr));
UserNo.len = 0;
if(g_DBConnected != 1)
{
return -1;
}
/*EXEC ORACLE OPTION (SQLCHECK = NONE);*/
EXEC SQL SELECT userno INTO :UserNo FROM infouser WHERE userno = :Tel AND applybusiness < 4 and (deleteflag IS NULL OR deleteflag = 'n' OR deleteflag = 'N') AND TerminalTypeId = 1;
/*EXEC ORACLE OPTION (SQLCHECK = SEMANTICS);*/
if(sqlca.sqlcode == 0)
{
ret = 0;
}
else
{
if (sqlca.sqlcode == -3113 || sqlca.sqlcode == -3114)
{
g_DBConnected = 0;
}
ret = -1;
}
return ret;
}
int DB2IsGdInfoUser(const char *Tel_in)
{
struct sqlca sqlca;
int ret;
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR Tel[20 + 1];
VARCHAR UserNo[20 + 1];
EXEC SQL END DECLARE SECTION;
memset(Tel.arr, 0, sizeof(Tel.arr));
strncpy(Tel.arr, Tel_in, sizeof(Tel.arr) - 1);
Tel.len = strlen(Tel.arr);
memset(UserNo.arr, 0, sizeof(UserNo.arr));
UserNo.len = 0;
if(g_DBConnected != 1)
{
return -1;
}
EXEC SQL AT :db_link2 SELECT userno INTO :UserNo FROM infouser WHERE userno = :Tel AND applybusiness < 4 and (deleteflag IS NULL OR deleteflag = 'n' OR deleteflag = 'N') AND TerminalTypeId = 1;
if(sqlca.sqlcode == 0)
{
ret = 0;
}
else
{
if (sqlca.sqlcode == -3113 || sqlca.sqlcode == -3114)
{
g_DBConnected2 = 0;
}
ret = -1;
}
return ret;
}
int DBSetIsInfoUser(const char *TabName, const char *Tel_in)
{
struct sqlca sqlca;
int ret;
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR sqlstr[512];
VARCHAR Tel[20 + 1];
EXEC SQL END DECLARE SECTION;
memset(Tel.arr, 0, sizeof(Tel.arr));
strncpy(Tel.arr, Tel_in, sizeof(Tel.arr) - 1);
Tel.len = strlen(Tel.arr);
if(g_DBConnected != 1)
{
return -1;
}
memset(sqlstr.arr, 0, sizeof(sqlstr.arr));
snprintf(sqlstr.arr, sizeof(sqlstr.arr) - 1, "UPDATE %s SET UserType = 2 WHERE Tel = :v1", TabName);
sqlstr.len = strlen(sqlstr.arr);
if(g_DBConnected != 1)
{
return -1;
}
EXEC SQL PREPARE s4 FROM :sqlstr;
EXEC SQL EXECUTE s4 USING :Tel;
if(sqlca.sqlcode == 0)
{
EXEC SQL COMMIT WORK;
ret = 0;
}
else if(sqlca.sqlcode > 0)
{
ret = -1;
}
else
{
if(sqlca.sqlcode == -3113 || sqlca.sqlcode == -3114)
{
g_DBConnected = 0;
}
EXEC SQL ROLLBACK WORK;
ret = -1;
}
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -