⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 db_op.ec

📁 界面库
💻 EC
📖 第 1 页 / 共 5 页
字号:
S_sys_param	t_sy_par;
char		t_bank_id[12];
char		t_host_id[3];
EXEC SQL END DECLARE SECTION;

int i;
FILE	*fp;
char	filename[128];
	
	EXEC SQL SELECT * INTO :t_sy_par FROM sys_param;

	if (SQLCODE) {
		errcall(ERROR, "取系统参数表失败[%ld]!", SQLCODE);
		return -1;
	}
	
	DelSpace(t_sy_par.bank_id);
	DelSpace(t_sy_par.host_id);

	strcpy(t_bank_id, t_sy_par.bank_id);
	strcpy(t_host_id, t_sy_par.host_id);
	
	EXEC SQL SELECT COUNT(*) INTO :G_bank_base_num
	FROM bank_base 
	WHERE bank_stat = 'Y'
	AND
	EXISTS (
		SELECT *  FROM bank_info
		WHERE bank_id = :t_bank_id
		AND host_id = :t_host_id
	)
	OR
	EXISTS (
		SELECT *  FROM bank_info
		WHERE adm_bank_id = :t_bank_id
		AND adm_host_id = :t_host_id
	);
	
	if (SQLCODE) {
		errcall(ERROR, "Select count(*) from bank_base error !");
		return -1;
	}
	
	if (G_bank_base_num == 0) {
		errcall(ERROR, "联行技术参数表为空!");	
		return -1;
	}
	
	if (G_bank_tab != NULL)
		free(G_bank_tab);
	
	G_bank_tab = (S_bank_base *)malloc(G_bank_base_num*sizeof(S_bank_base));

	if (G_bank_tab == NULL) {
		errcall( ERROR , "申请内存失败!");
		return -1;
	}

	memset(G_bank_tab, '\0', sizeof(S_bank_base) * G_bank_base_num);
	memset(filename, '\0', sizeof(filename));
	
	EXEC SQL DECLARE sel_bank CURSOR FOR 
	SELECT * FROM bank_base 
	WHERE bank_stat = 'Y'
	AND
	EXISTS (
		SELECT *  FROM bank_info
		WHERE bank_id = :t_bank_id
		AND host_id = :t_host_id
	)
	OR
	EXISTS (
		SELECT *  FROM bank_info
		WHERE adm_bank_id = :t_bank_id
		AND adm_host_id = :t_host_id
	)
	ORDER BY bank_id;
	
	EXEC SQL OPEN sel_bank;
	
	if (SQLCODE) {
		errcall(ERROR, "打开数据库游标失败[%ld]!", SQLCODE);
		free(G_bank_tab);
		G_bank_tab = NULL;
		return -1;
	}

	sprintf(filename, "%s/etc/IP_FILTER", getenv("WORKDIR"));
	if ((fp = fopen(filename, "w+")) == NULL) {
		errcall(ERROR, "%s文件操作失败!(%d)", filename, errno);
		free(G_bank_tab);
		G_bank_tab = NULL;
		return -1;
	}

	for (i = 0; i < G_bank_base_num; i++) {
		EXEC SQL FETCH sel_bank INTO :bank_base_item;
		
		if ( SQLCODE ) {
			EXEC SQL CLOSE sel_bank;
			G_bank_base_num = i;
			fclose(fp);
			return 0;
		}

		del_st_space("bank_base", &bank_base_item);
		memcpy(&(G_bank_tab[i]), &bank_base_item, sizeof(S_bank_base));

		fwrite(&bank_base_item, sizeof(S_bank_base), 1, fp);
	}

	EXEC SQL CLOSE sel_bank;
	fclose(fp);
	return 0;
}

$ifdef zgx020510_added;
$else;
/***************************************************************
功能:
	装载相关的联行信息(从所有路由表搜取)
	并从联行网控器资料表中获取所有地市行网控器信息
ENTRY:
RETURN:
	0	SUCC
	-1	FAIL
****************************************************************/
int load_bank_tab_netm()
{
	EXEC SQL BEGIN DECLARE SECTION;
	S_bank_base	bank_base_item;
	S_sys_param	t_sy_par;
	char		t_bank_id[12];
	char		t_host_id[3];
	int		nac_num;
	int		bank_num;
	EXEC SQL END DECLARE SECTION;

	int i;
	FILE	*fp;
	char	filename[128];
	
	EXEC SQL SELECT * INTO :t_sy_par FROM sys_param;

	if (SQLCODE) {
		errcall(ERROR, "取系统参数表失败[%ld]!", SQLCODE);
		return -1;
	}
	
	DelSpace(t_sy_par.bank_id);
	DelSpace(t_sy_par.host_id);

	strcpy(t_bank_id, t_sy_par.bank_id);
	strcpy(t_host_id, t_sy_par.host_id);
	
	EXEC SQL SELECT COUNT(*) INTO :bank_num
	FROM bank_base 
	WHERE bank_stat = 'Y'
	AND
	EXISTS (
		SELECT *  FROM bank_info
		WHERE bank_id = :t_bank_id
		AND host_id = :t_host_id
	)
	OR
	EXISTS (
		SELECT *  FROM bank_info
		WHERE adm_bank_id = :t_bank_id
		AND adm_host_id = :t_host_id
	);
	
	if (SQLCODE) {
		errcall(ERROR, "Select count(*) from bank_base error !");
		return -1;
	}
	
	/*
	 * 从网控器资料表
	 */
	EXEC SQL SELECT COUNT(*) INTO :nac_num
	FROM bank_base_nac 
	WHERE bank_stat = 'Y'
	AND
	EXISTS (
		SELECT *  FROM bank_info
		WHERE bank_id = :t_bank_id
		AND host_id = :t_host_id
	)
	OR
	EXISTS (
		SELECT *  FROM bank_info
		WHERE adm_bank_id = :t_bank_id
		AND adm_host_id = :t_host_id
	);
	
	if (SQLCODE) {
		errcall(ERROR, "Select count(*) from bank_base_nac error !");
		return -1;
	}
	
	if (bank_num == 0) {
		errcall(ERROR, "联行技术参数表为空!");	
		if (nac_num == 0) {
			errcall(ERROR, "网控器技术参数表为空!");	
			return -1;
		}
	}
	
	G_bank_base_num = bank_num + nac_num;

	if (G_bank_tab != NULL)
		free(G_bank_tab);
	
	G_bank_tab = (S_bank_base *)malloc(G_bank_base_num*sizeof(S_bank_base));

	if (G_bank_tab == NULL) {
		errcall( ERROR , "申请内存失败!");
		return -1;
	}

	memset(G_bank_tab, '\0', sizeof(S_bank_base) * G_bank_base_num);
	memset(filename, '\0', sizeof(filename));
	
	sprintf(filename, "%s/etc/IP_FILTER", getenv("WORKDIR"));
	if ((fp = fopen(filename, "w+")) == NULL) {
		errcall(ERROR, "%s文件操作失败!(%d)", filename, errno);
		free(G_bank_tab);
		G_bank_tab = NULL;
		return -1;
	}

$ifdef wyz020920_mod;
	EXEC SQL DECLARE sel_bank1 CURSOR FOR 
$else;
$endif;
	EXEC SQL DECLARE sel_bank1 CURSOR WITH HOLD FOR 
	SELECT * FROM bank_base 
	WHERE bank_stat = 'Y'
	AND
	EXISTS (
		SELECT *  FROM bank_info
		WHERE bank_id = :t_bank_id
		AND host_id = :t_host_id
	)
	OR
	EXISTS (
		SELECT *  FROM bank_info
		WHERE adm_bank_id = :t_bank_id
		AND adm_host_id = :t_host_id
	)
	ORDER BY bank_id;
	
	EXEC SQL OPEN sel_bank1;
	
	if (SQLCODE) {
		errcall(ERROR, "打开数据库游标失败[%ld]!", SQLCODE);
		free(G_bank_tab);
		G_bank_tab = NULL;
		return -1;
	}

	for (i = 0; i < bank_num; i++) {
		EXEC SQL FETCH sel_bank1 INTO :bank_base_item;
		
		if ( SQLCODE ) {
			EXEC SQL CLOSE sel_bank1;
			G_bank_base_num = i;
			fclose(fp);
			return 0;
		}

		del_st_space("bank_base", &bank_base_item);
		memcpy(&(G_bank_tab[i]), &bank_base_item, sizeof(S_bank_base));

		fwrite(&bank_base_item, sizeof(S_bank_base), 1, fp);
	}

	EXEC SQL CLOSE sel_bank1;

	/* NAC information */
	EXEC SQL DECLARE sel_nac CURSOR FOR 
	SELECT * FROM bank_base_nac 
	WHERE bank_stat = 'Y'
	AND
	EXISTS (
		SELECT *  FROM bank_info
		WHERE bank_id = :t_bank_id
		AND host_id = :t_host_id
	)
	OR
	EXISTS (
		SELECT *  FROM bank_info
		WHERE adm_bank_id = :t_bank_id
		AND adm_host_id = :t_host_id
	)
	ORDER BY bank_id;
	
	EXEC SQL OPEN sel_nac;
	
	if (SQLCODE) {
		errcall(ERROR, "打开数据库bank_base_nac游标失败[%ld]!", SQLCODE);
		free(G_bank_tab);
		G_bank_tab = NULL;
		return -1;
	}

	for (i = bank_num; i < bank_num + nac_num; i++) {
		EXEC SQL FETCH sel_nac INTO :bank_base_item;
		
		if ( SQLCODE ) {
			EXEC SQL CLOSE sel_nac;
			G_bank_base_num = i;
			fclose(fp);
			return 0;
		}

		del_st_space("bank_base", &bank_base_item);
		memcpy(&(G_bank_tab[i]), &bank_base_item, sizeof(S_bank_base));

		fwrite(&bank_base_item, sizeof(S_bank_base), 1, fp);
	}

	EXEC SQL CLOSE sel_nac;

	fclose(fp);
	return 0;
}

$endif;	/* zgx020510_added */

/***************************************************************
功能:
	将卡段路由,缺省路由等路由信息装载
	到内存中。
ENTRY:
RETURN:
	0	SUCC
	-1	FAIL
****************************************************************/
int load_router_tab ()
{
EXEC SQL BEGIN DECLARE SECTION;
S_card_route card_router_item;
EXEC SQL END DECLARE SECTION;

int 	i;
	
	EXEC SQL SELECT * INTO :G_default_router FROM default_route;
	
	if (SQLCODE &&
		!strcmp(G_sys_param.bank_id, G_sys_param.adm_bank_id)) {
		errcall(ERROR, "取默认路由失败[%ld]!", SQLCODE);
		return -1;
	}

	del_st_space("default_route", &G_default_router);
	
	EXEC SQL SELECT COUNT(*) INTO :G_card_router_num
	FROM card_route;
	
	if (SQLCODE) {
		errcall(ERROR, "取卡路由条目数失败[%ld]!", SQLCODE);
		return -1;
	}
	
	if (G_card_router_num == 0) {
		errcall(ERROR, "卡路由为空,请配置");	
		return -1;
	}
	
	if ( G_card_router_tab != NULL ) free (G_card_router_tab);
	
	G_card_router_tab = (S_card_route *)malloc(G_card_router_num * sizeof(S_card_route));

	if (G_card_router_tab == NULL) {
		errcall(ERROR, "申请内存失败!");
		return -1;
	}

	memset(G_card_router_tab, '\0', sizeof(S_card_route) * G_card_router_num);
	
	EXEC SQL DECLARE sel_router CURSOR FOR 
	SELECT * FROM card_route;

	EXEC SQL OPEN sel_router;
	
	if (SQLCODE) {
		errcall(ERROR, "打开数据库游标失败[%ld]!", SQLCODE);
		free(G_card_router_tab);
		G_card_router_tab = NULL;
		return -1;
	}
	
	for(i=0; i<G_card_router_num; i++) {
		EXEC SQL FETCH sel_router INTO :card_router_item;
		
		if (SQLCODE) {
			EXEC SQL CLOSE sel_router;
			G_card_router_num = i;
			return 0;
		}
		
		del_st_space("card_route", &card_router_item);
		memcpy(&(G_card_router_tab[i]), &card_router_item, sizeof(S_card_route));
	}

	EXEC SQL CLOSE sel_router;
	return 0;
}

/***************************************************************
功能:
	装载交易路由信息
ENTRY:
RETURN:
	0	SUCC
	-1	FAIL
****************************************************************/
int load_tran_router_tab ()
{

EXEC SQL BEGIN DECLARE SECTION;
S_tran_route tran_router_item;
EXEC SQL END DECLARE SECTION;

int 	i;
	
	
	EXEC SQL SELECT COUNT(*) INTO :G_tran_router_num
	FROM tran_route;
	
	if (SQLCODE) {
		errcall(ERROR, "取交易路由条目数失败[%ld]", SQLCODE);
		return -1;
	}
	
	if (G_tran_router_num == 0) {
		errcall(ERROR, "交易路由为空,请配置");	
		return -1;
	}
	
	if (G_tran_router_tab != NULL)
		free(G_tran_router_tab);
	
	G_tran_router_tab = (S_tran_route *)malloc(G_tran_router_num*sizeof(S_tran_route));
	if (G_tran_router_tab == NULL) {
		errcall(ERROR, "申请内存失败!");
		return -1;
	}

	memset(G_tran_router_tab, '\0', sizeof(S_tran_route)*G_tran_router_num);
	
	EXEC SQL DECLARE sel_tran_router CURSOR FOR 
	SELECT * FROM tran_route;

	EXEC SQL OPEN sel_tran_router;
	
	if (SQLCODE) {
		errcall(ERROR, "打开数据库游标失败[%ld]!", SQLCODE);
		free(G_tran_router_tab);
		G_tran_router_tab = NULL;
		return -1;
	}
	
	for(i=0; i<G_tran_router_num; i++) {
		EXEC SQL FETCH sel_tran_router INTO :tran_router_item;
		
		if (SQLCODE) {
			EXEC SQL CLOSE sel_tran_router;
			G_tran_router_num = i;
			return 0;
		}
		
		del_st_space("tran_route", &tran_router_item);
		memcpy(&(G_tran_router_tab[i]), &tran_router_item, sizeof(S_tran_route));
	}

	EXEC SQL CLOSE sel_tran_router;
	return 0;
}

#ifdef wyz020813_mod
#else
/***************************************************************
功能:
	装载银行卡交易路由信息
ENTRY:
RETURN:
	0	SUCC
	-1	FAIL
****************************************************************/
int load_bankcard_router_tab ()
{

EXEC SQL BEGIN DECLARE SECTION;
S_bankcard_route bankcard_router_item;
EXEC SQL END DECLARE SECTION;

int 	i;
	
	
	EXEC SQL SELECT COUNT(*) INTO :G_bankcard_router_num
	FROM bankcard_route;
	
	if (SQLCODE && SQLCODE != 100) {
		errcall(ERROR, "取银行卡交易路由条目数失败[%ld]", SQLCODE);
		return -1;
	}
	
	if (G_bankcard_router_num == 0) {
		errcall(DEBUG, "银行卡交易路由为空,请配置");	
		return 0;
	}
	
	if (G_bankcard_router_tab != NULL)
		free(G_bankcard_router_tab);
	
	G_bankcard_router_tab = (S_bankcard_route *)malloc(G_bankcard_router_num*sizeof(S_bankcard_route));
	if (G_bankcard_router_tab == NULL) {
		errcall(ERROR, "申请内存失败!");
		return -1;
	}

	memset(G_bankcard_router_tab, '\0', sizeof(S_bankcard_route)*G_bankcard_router_num);
	
	EXEC SQL DECLARE s_bankcard_router CURSOR FOR 
	SELECT * FROM bankcard_route;

	EXEC SQL OPEN s_bankcard_router;
	if (SQLCODE) {
		errcall(ERROR, "打开数据库游标失败[%ld]!", SQLCODE);
		free(G_bankcard_router_tab);
		G_bankcard_router_tab = NULL;
		return -1;
	}
	
	for(i=0; i<G_bankcard_router_num; i++) {
		EXEC SQL FETCH s_bankcard_router INTO :bankcard_router_item;
		
		if (SQLCODE) {
			EXEC SQL CLOSE s_bankcard_router;
			G_bankcard_router_num = i;
			return 0;
		}
		
		del_st_space("bankcard_route", &bankcard_router_item);
		memcpy(&(G_bankcard_router_tab[i]), &bankcard_router_item, sizeof(S_bankcard_route));
	}

	EXEC SQL CLOSE s_bankcard_router;
	return 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -