/* Result Sets Interface */
#ifndef SQL_CRSR
# define SQL_CRSR
struct sql_cursor
{
unsigned int curocn;
void *ptr1;
void *ptr2;
unsigned int magic;
};
typedef struct sql_cursor sql_cursor;
typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */
/* Thread Safety */
typedef void * sql_context;
typedef void * SQL_CONTEXT;
/* Object support */
struct sqltvn
{
unsigned char *tvnvsn;
unsigned short tvnvsnl;
unsigned char *tvnnm;
unsigned short tvnnml;
unsigned char *tvnsnm;
unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;
struct sqladts
{
unsigned int adtvsn;
unsigned short adtmode;
unsigned short adtnum;
sqltvn adttvn[1];
};
typedef struct sqladts sqladts;
static struct sqladts sqladt = {
1,1,0,
};
/* Binding to PL/SQL Records */
struct sqltdss
{
unsigned int tdsvsn;
unsigned short tdsnum;
unsigned char *tdsval[1];
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
1,
0,
};
/* File name & Package Name */
struct sqlcxp
{
unsigned short fillen;
char filnam[16];
};
static struct sqlcxp sqlfpn =
{
15,
"store_ngskip.pc"
};
static unsigned int sqlctx = 2697803;
static struct sqlexd {
unsigned long sqlvsn;
unsigned int arrsiz;
unsigned int iters;
unsigned int offset;
unsigned short selerr;
unsigned short sqlety;
unsigned int occurs;
short *cud;
unsigned char *sqlest;
char *stmt;
sqladts *sqladtp;
sqltdss *sqltdsp;
unsigned char **sqphsv;
unsigned long *sqphsl;
int *sqphss;
short **sqpind;
int *sqpins;
unsigned long *sqparm;
unsigned long **sqparc;
unsigned short *sqpadto;
unsigned short *sqptdso;
unsigned int sqlcmax;
unsigned int sqlcmin;
unsigned int sqlcincr;
unsigned int sqlctimeout;
unsigned int sqlcnowait;
int sqfoff;
unsigned int sqcmod;
unsigned int sqfmod;
unsigned int sqlpfmem;
unsigned char *sqhstv[12];
unsigned long sqhstl[12];
int sqhsts[12];
short *sqindv[12];
int sqinds[12];
unsigned long sqharm[12];
unsigned long *sqharc[12];
unsigned short sqadto[12];
unsigned short sqtdso[12];
} sqlstm = {13,12};
/* SQLLIB Prototypes */
extern sqlcxt (/*_ void **, unsigned int *,
struct sqlexd *, struct sqlcxp * _*/);
extern sqlcx2t(/*_ void **, unsigned int *,
struct sqlexd *, struct sqlcxp * _*/);
extern sqlbuft(/*_ void **, char * _*/);
extern sqlgs2t(/*_ void **, char * _*/);
extern sqlorat(/*_ void **, unsigned int *, void * _*/);
/* Forms Interface */
static int IAPSUCC = 0;
static int IAPFAIL = 1403;
static int IAPFTL = 535;
extern void sqliem(/*_ unsigned char *, signed int * _*/);
typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;
/* CUD (Compilation Unit Data) Array */
static short sqlcud0[] =
{13,4130,1,0,0,
5,0,0,0,0,0,27,60,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,1,10,0,0,
36,0,0,2,0,0,32,64,0,0,0,0,0,1,0,
51,0,0,3,0,0,32,80,0,0,0,0,0,1,0,
66,0,0,4,0,0,31,115,0,0,0,0,0,1,0,
81,0,0,5,71,0,4,120,0,0,1,0,0,1,0,2,97,0,0,
100,0,0,6,174,0,3,159,0,0,7,7,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,1,97,0,0,1,97,0,
0,1,97,0,0,1,0,0,0,
143,0,0,7,143,0,3,189,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,1,0,0,0,
174,0,0,8,0,0,29,229,0,0,0,0,0,1,0,
189,0,0,9,0,0,31,232,0,0,0,0,0,1,0,
204,0,0,10,0,0,31,258,0,0,0,0,0,1,0,
219,0,0,11,229,0,3,322,0,0,12,12,0,1,0,1,97,0,0,1,3,0,0,1,97,0,0,1,97,0,0,1,97,
0,0,1,97,0,0,1,97,0,0,1,3,0,0,1,97,0,0,1,97,0,0,1,97,0,0,1,0,0,0,
};
/******************************************************************************
受発注連携クライアント DB処理
mod:2018/5/21 SQLエラー時にabortするよう修正
mod:2019/10/7 発注データ内容不正時の処理追加
******************************************************************************/
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*** add 2019/10/7 start ***/
#include <errno.h>
/*** add 2019/10/7 end ***/
#include <sqlda.h>
#include <sqlcpr.h>
#include "logging.h"
#include "bj_onl_trn_client.h"
#include "store.h"
/*** add 2019/10/7 start ***/
#include "config.h"
/*** add 2019/10/7 end ***/
/* procコマンドでエラーが表示されるため _DEBUG_のときのみインクルードする */
#ifdef _DEBUG_
#include "trace.h"
#else
#define _TRACE_(level, body)
#endif
/******************************************************************************
ホスト変数
******************************************************************************/
char dbname[DB_NAME_LEN+1];
char username[DB_USERNAME_LEN+1];
char password[DB_PASSWORD_LEN+1];
char process_name[LEN_PG_ID+1];
struct odr_trn_head trn_head;
struct odr_trn_mei trn_mei;
/******************************************************************************
sqlca
******************************************************************************/
#include <sqlca.h>
/******************************************************************************
初期化
返り値 0 : OK
-1 : エラー
******************************************************************************/
int store_initialize()
{
_TRACE_(10, ("username [%s] password [%s] dbname [%s]"
, username, password, dbname));
/* データベースへの接続 */
/* EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbname; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )10;
sqlstm.offset = (unsigned int )5;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = (unsigned char *)username;
sqlstm.sqhstl[0] = (unsigned long )21;
sqlstm.sqhsts[0] = ( int )21;
sqlstm.sqindv[0] = ( short *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned long )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = (unsigned char *)password;
sqlstm.sqhstl[1] = (unsigned long )41;
sqlstm.sqhsts[1] = ( int )41;
sqlstm.sqindv[1] = ( short *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned long )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = (unsigned char *)dbname;
sqlstm.sqhstl[2] = (unsigned long )21;
sqlstm.sqhsts[2] = ( int )21;
sqlstm.sqindv[2] = ( short *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned long )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlstm.sqlcmax = (unsigned int )100;
sqlstm.sqlcmin = (unsigned int )2;
sqlstm.sqlcincr = (unsigned int )1;
sqlstm.sqlctimeout = (unsigned int )0;
sqlstm.sqlcnowait = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
_TRACE_(0, ("sqlcode : %d", sqlca.sqlcode));
if(sqlca.sqlcode < 0) {
log_printf(LOG_ERROR, "Database connect error %s%", sqlca.sqlerrm.sqlerrmc);
/* EXEC SQL ROLLBACK RELEASE; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )36;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
return -1;
}
return 0;
}
/******************************************************************************
終了
返り値 0 : OK
******************************************************************************/
int store_terminate()
{
_TRACE_(10, (""));
/* データベースからの切断 */
/* EXEC SQL ROLLBACK WORK RELEASE; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )51;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
return 0;
}
/******************************************************************************
トランザクションの開始
返り値 0 : OK
******************************************************************************/
int store_begin(char *trn_file_id)
{
_TRACE_(10, (""));
log_printf(LOG_INFO, "START TRN_FILE_ID=%s", trn_file_id);
/* 発注キュー及び発注トランヘッダ用ホスト変数の初期化 */
memset(&trn_head, 0, sizeof(trn_head));
/* トランファイルIDをホスト変数へ格納 */
strncpy(trn_head.trn_file_id, trn_file_id, LEN_TRN_FILE_ID);
return 0;
}
/*** add 2019/10/7 start ***/
/******************************************************************************
発注データINSERTエラー時の処理
******************************************************************************/
int store_ins_error(char *buffer, size_t size)
{
char timestamp_buf[18];
FILE *temp_file = NULL;
char temp_filename[PATH_MAX];
_TRACE_(10, (""));
_TRACE_(10, ("trn_file_id [%s]", trn_head.trn_file_id));
/* EXEC SQL ROLLBACK WORK; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )66;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
memset(timestamp_buf, 0, sizeof(timestamp_buf));
memset(temp_filename, 0, sizeof(temp_filename));
/* EXEC SQL SELECT TO_CHAR(SYSTIMESTAMP,'YYYYMMDDHH24MISSFF3') INTO :timestamp_buf FROM DUAL; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "select TO_CHAR(SYSTIMESTAMP,'YYYYMMDDHH24MISSFF3') into :\
b0 from DUAL ";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )81;
sqlstm.selerr = (unsigned short)1;
sqlstm.sqlpfmem = (unsigned int )0;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = (unsigned char *)timestamp_buf;
sqlstm.sqhstl[0] = (unsigned long )18;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( short *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned long )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
if(sqlca.sqlcode < 0) {
log_printf(LOG_ERROR, "Database session error%s%", sqlca.sqlerrm.sqlerrmc);
abort();
} else {
/* TEMPファイル出力 */
sprintf(temp_filename, "%s_%s.TEMP.%s"
, get_config()->log_file
, get_config()->process_name
, timestamp_buf);
temp_file = fopen(temp_filename, "ab+");
if(temp_file == NULL) {
log_printf(LOG_ERROR, "TEMP file open error : [%s] %s(%d)",temp_filename, strerror(errno), errno);
abort();
}
fwrite(buffer, size, 1, temp_file);
fclose(temp_file);
log_printf(LOG_WARN, "SKIP TRN_FILE_ID=%s TEMP_FILE=%s", trn_head.trn_file_id, temp_filename);
}
return 0;
}
/*** add 2019/10/7 end ***/
/******************************************************************************
仕上げの処理(発注トランヘッダテーブルと発注キューテーブルの登録)
返り値 0 : OK
-1 : エラー
******************************************************************************/
int store_finish()
{
int retry_count = 0;
BOOL sqldone = NO;
_TRACE_(10, (""));
/* 発注トランヘッダテーブルへINSERT */
while(!sqldone) {
/* EXEC SQL INSERT INTO BJ_T_ODR_TRN_HEAD (TRN_FILE_ID,HCHIKU_HEAD,TENBAN_HEAD,
RCV_DATE,RCV_TIME,REC_RGST_DT,REC_RGST_PG_ID,REC_RGST_ID)
VALUES (:trn_head.trn_file_id,:trn_head.hchiku_head,:trn_head.tenban_head
,:trn_head.rcv_date,:trn_head.rcv_time,systimestamp,:process_name,:process_name); */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 7;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "insert into BJ_T_ODR_TRN_HEAD (TRN_FILE_ID,HCHIKU_HEA\
D,TENBAN_HEAD,RCV_DATE,RCV_TIME,REC_RGST_DT,REC_RGST_PG_ID,REC_RGST_ID) values\
(:b0,:b1,:b2,:b3,:b4,systimestamp,:b5,:b5)";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )100;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = (unsigned char *)(trn_head.trn_file_id);
sqlstm.sqhstl[0] = (unsigned long )129;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( short *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned long )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = (unsigned char *)(trn_head.hchiku_head);
sqlstm.sqhstl[1] = (unsigned long )3;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( short *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned long )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = (unsigned char *)(trn_head.tenban_head);
sqlstm.sqhstl[2] = (unsigned long )6;
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( short *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned long )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = (unsigned char *)(trn_head.rcv_date);
sqlstm.sqhstl[3] = (unsigned long )9;
sqlstm.sqhsts[3] = ( int )0;
sqlstm.sqindv[3] = ( short *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned long )0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = (unsigned char *)(trn_head.rcv_time);
sqlstm.sqhstl[4] = (unsigned long )10;
sqlstm.sqhsts[4] = ( int )0;
sqlstm.sqindv[4] = ( short *)0;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned long )0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = (unsigned char *)process_name;
sqlstm.sqhstl[5] = (unsigned long )18;
sqlstm.sqhsts[5] = ( int )0;
sqlstm.sqindv[5] = ( short *)0;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned long )0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqhstv[6] = (unsigned char *)process_name;
sqlstm.sqhstl[6] = (unsigned long )18;
sqlstm.sqhsts[6] = ( int )0;
sqlstm.sqindv[6] = ( short *)0;
sqlstm.sqinds[6] = ( int )0;
sqlstm.sqharm[6] = (unsigned long )0;
sqlstm.sqadto[6] = (unsigned short )0;
sqlstm.sqtdso[6] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
if(sqlca.sqlcode < 0) {
log_printf(LOG_ERROR, "Database insert BJ_T_ODR_TRN_HEAD error%s%", sqlca.sqlerrm.sqlerrmc);
/*** mod 2019/10/7 start ***/
/* EXEC SQL ROLLBACK WORK;*/
/* if (retry_count < MAX_SQL_RETRY) {*/
/* sleep(SQL_RETRY_TIMER);*/
/* retry_count++;*/
/* } else {*/
/* abort();*/
/* }*/
if (retry_count < MAX_INS_RETRY) {
sleep(SQL_RETRY_TIMER);
retry_count++;
} else {
return -1;
}
/*** mod 2019/10/7 end ***/
} else {
sqldone = YES;
}
}
/* 発注キューテーブルへINSERT */
retry_count = 0;
sqldone = NO;
while(!sqldone) {
/* EXEC SQL INSERT INTO BJ_T_HAT_QUETBL (TRN_FILE_ID,TENBAN_HEAD,PROC_FLG,REC_RGST_DT,REC_RGST_PG_ID,REC_RGST_ID)
VALUES (:trn_head.trn_file_id,:trn_head.tenban_head,'0',systimestamp,:process_name,:process_name); */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 7;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "insert into BJ_T_HAT_QUETBL (TRN_FILE_ID,TENBAN_HEAD,\
PROC_FLG,REC_RGST_DT,REC_RGST_PG_ID,REC_RGST_ID) values (:b0,:b1,'0',systimest\
amp,:b2,:b2)";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )143;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = (unsigned char *)(trn_head.trn_file_id);
sqlstm.sqhstl[0] = (unsigned long )129;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( short *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned long )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = (unsigned char *)(trn_head.tenban_head);
sqlstm.sqhstl[1] = (unsigned long )6;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( short *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned long )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = (unsigned char *)process_name;
sqlstm.sqhstl[2] = (unsigned long )18;
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( short *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned long )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = (unsigned char *)process_name;
sqlstm.sqhstl[3] = (unsigned long )18;
sqlstm.sqhsts[3] = ( int )0;
sqlstm.sqindv[3] = ( short *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned long )0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
if(sqlca.sqlcode < 0) {
log_printf(LOG_ERROR, "Database insert BJ_T_HAT_QUETBL error%s%", sqlca.sqlerrm.sqlerrmc);
/*** mod 2019/10/7 start ***/
/* EXEC SQL ROLLBACK WORK;*/
/* if (retry_count < MAX_SQL_RETRY) {*/
/* sleep(SQL_RETRY_TIMER);*/
/* retry_count++;*/
/* } else {*/
/* abort();*/
/* }*/
if (retry_count < MAX_INS_RETRY) {
sleep(SQL_RETRY_TIMER);
retry_count++;
} else {
return -1;
}
/*** mod 2019/10/7 end ***/
} else {
sqldone = YES;
}
}
return 0;
}
/******************************************************************************
トランザクションのコミット
返り値 0 : OK
-1 : エラー
******************************************************************************/
int store_commit()
{
int retry_count = 0;
BOOL sqldone = NO;
_TRACE_(10, (""));
/* トランザクションのコミット */
while(!sqldone) {
/* EXEC SQL COMMIT WORK; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 7;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )174;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
if(sqlca.sqlcode < 0) {
log_printf(LOG_ERROR, "Database commit error%s%", sqlca.sqlerrm.sqlerrmc);
/* EXEC SQL ROLLBACK WORK; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 7;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )189;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
if (retry_count < MAX_SQL_RETRY) {
retry_count++;
sleep(SQL_RETRY_TIMER);
} else {
abort();
}
} else {
sqldone = YES;
}
}
log_printf(LOG_INFO, "END TRN_FILE_ID=%s", trn_head.trn_file_id);
return 0;
}
/******************************************************************************
トランザクションのアボート
返り値 0 : OK
******************************************************************************/
int store_abort()
{
_TRACE_(10, (""));
/* トランザクションのアボート */
/* EXEC SQL ROLLBACK WORK; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 7;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )204;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
log_printf(LOG_INFO, "ABORT TRN_FILE_ID=%s", trn_head.trn_file_id);
return 0;
}
/******************************************************************************
発注データ(ヘッダ部)処理
返り値 0 : OK
******************************************************************************/
int store_add_head(interm_head_def *interm_head)
{
_TRACE_(10, (""));
/* 値のホスト変数への格納 */
memcpy(trn_head.hchiku_head, interm_head->hchiku, LEN_HCHIKU);
memcpy(trn_head.tenban_head, interm_head->tenban, LEN_TENBAN);
memcpy(trn_head.rcv_date, interm_head->rcv_date, LEN_RCV_DATE);
memcpy(trn_head.rcv_time, interm_head->rcv_time, LEN_RCV_TIME);
return 0;
}
/******************************************************************************
発注データ(データ部)処理
返り値 0 : OK
******************************************************************************/
int store_add_data(interm_data_def *intinterm_data)
{
_TRACE_(10, (""));
/* 発注トラン明細用ホスト変数の初期化 */
memset(&trn_mei, 0, sizeof(trn_mei));
/* 値のホスト変数への格納 */
trn_mei.seq_no = intinterm_data->seq_no;
memcpy(trn_mei.hchiku, intinterm_data->hchiku, LEN_HCHIKU);
memcpy(trn_mei.tenban, intinterm_data->tenban, LEN_TENBAN);
memcpy(trn_mei.hat_date, intinterm_data->hat_date, LEN_HAT_DATE);
return 0;
}
/******************************************************************************
発注データ(データ部)のTEXT部処理
返り値 0 : OK
-1 : エラー
******************************************************************************/
int store_add_detail(interm_detail_def *interm_detail)
{
int retry_count = 0;
BOOL sqldone = NO;
_TRACE_(10, (""));
/* 値のホスト変数への格納 */
memcpy(trn_mei.hatsk_cd, interm_detail->hatsk_cd, LEN_HATSK_CD);
memcpy(trn_mei.shohin_cd, interm_detail->shohin_cd, LEN_SHOHIN_CD);
trn_mei.hat_baisu =interm_detail-> hat_baisu;
memcpy(trn_mei.pop_kbn, interm_detail->pop_kbn, LEN_POP_KBN);
memcpy(trn_mei.hat_type, interm_detail->hat_type, LEN_HAT_TYPE);
/* 発注トラン明細テーブルへINSERT */
while(!sqldone) {
/* EXEC SQL INSERT INTO BJ_T_ODR_TRN_MEI (TRN_FILE_ID,SEQ_NO,HCHIKU,TENBAN,HAT_DATE
,HATSK_CD,SHOHIN_CD,HAT_BAISU,POP_KBN,HAT_TYPE
,REC_RGST_DT,REC_RGST_PG_ID,REC_RGST_ID)
VALUES (:trn_head.trn_file_id,:trn_mei.seq_no,:trn_mei.hchiku,:trn_mei.tenban,:trn_mei.hat_date
,:trn_mei.hatsk_cd,:trn_mei.shohin_cd,:trn_mei.hat_baisu,:trn_mei.pop_kbn,:trn_mei.hat_type
,systimestamp,:process_name,:process_name); */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 13;
sqlstm.arrsiz = 12;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "insert into BJ_T_ODR_TRN_MEI (TRN_FILE_ID,SEQ_NO,HCHI\
KU,TENBAN,HAT_DATE,HATSK_CD,SHOHIN_CD,HAT_BAISU,POP_KBN,HAT_TYPE,REC_RGST_DT,R\
EC_RGST_PG_ID,REC_RGST_ID) values (:b0,:b1,:b2,:b3,:b4,:b5,:b6,:b7,:b8,:b9,sys\
timestamp,:b10,:b10)";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )219;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)4352;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = (unsigned char *)(trn_head.trn_file_id);
sqlstm.sqhstl[0] = (unsigned long )129;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( short *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned long )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = (unsigned char *)&(trn_mei.seq_no);
sqlstm.sqhstl[1] = (unsigned long )sizeof(int);
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( short *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned long )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = (unsigned char *)(trn_mei.hchiku);
sqlstm.sqhstl[2] = (unsigned long )3;
sqlstm.sqhsts[2] = ( int )0;
sqlstm.sqindv[2] = ( short *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned long )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqhstv[3] = (unsigned char *)(trn_mei.tenban);
sqlstm.sqhstl[3] = (unsigned long )6;
sqlstm.sqhsts[3] = ( int )0;
sqlstm.sqindv[3] = ( short *)0;
sqlstm.sqinds[3] = ( int )0;
sqlstm.sqharm[3] = (unsigned long )0;
sqlstm.sqadto[3] = (unsigned short )0;
sqlstm.sqtdso[3] = (unsigned short )0;
sqlstm.sqhstv[4] = (unsigned char *)(trn_mei.hat_date);
sqlstm.sqhstl[4] = (unsigned long )9;
sqlstm.sqhsts[4] = ( int )0;
sqlstm.sqindv[4] = ( short *)0;
sqlstm.sqinds[4] = ( int )0;
sqlstm.sqharm[4] = (unsigned long )0;
sqlstm.sqadto[4] = (unsigned short )0;
sqlstm.sqtdso[4] = (unsigned short )0;
sqlstm.sqhstv[5] = (unsigned char *)(trn_mei.hatsk_cd);
sqlstm.sqhstl[5] = (unsigned long )9;
sqlstm.sqhsts[5] = ( int )0;
sqlstm.sqindv[5] = ( short *)0;
sqlstm.sqinds[5] = ( int )0;
sqlstm.sqharm[5] = (unsigned long )0;
sqlstm.sqadto[5] = (unsigned short )0;
sqlstm.sqtdso[5] = (unsigned short )0;
sqlstm.sqhstv[6] = (unsigned char *)(trn_mei.shohin_cd);
sqlstm.sqhstl[6] = (unsigned long )9;
sqlstm.sqhsts[6] = ( int )0;
sqlstm.sqindv[6] = ( short *)0;
sqlstm.sqinds[6] = ( int )0;
sqlstm.sqharm[6] = (unsigned long )0;
sqlstm.sqadto[6] = (unsigned short )0;
sqlstm.sqtdso[6] = (unsigned short )0;
sqlstm.sqhstv[7] = (unsigned char *)&(trn_mei.hat_baisu);
sqlstm.sqhstl[7] = (unsigned long )sizeof(int);
sqlstm.sqhsts[7] = ( int )0;
sqlstm.sqindv[7] = ( short *)0;
sqlstm.sqinds[7] = ( int )0;
sqlstm.sqharm[7] = (unsigned long )0;
sqlstm.sqadto[7] = (unsigned short )0;
sqlstm.sqtdso[7] = (unsigned short )0;
sqlstm.sqhstv[8] = (unsigned char *)(trn_mei.pop_kbn);
sqlstm.sqhstl[8] = (unsigned long )3;
sqlstm.sqhsts[8] = ( int )0;
sqlstm.sqindv[8] = ( short *)0;
sqlstm.sqinds[8] = ( int )0;
sqlstm.sqharm[8] = (unsigned long )0;
sqlstm.sqadto[8] = (unsigned short )0;
sqlstm.sqtdso[8] = (unsigned short )0;
sqlstm.sqhstv[9] = (unsigned char *)(trn_mei.hat_type);
sqlstm.sqhstl[9] = (unsigned long )3;
sqlstm.sqhsts[9] = ( int )0;
sqlstm.sqindv[9] = ( short *)0;
sqlstm.sqinds[9] = ( int )0;
sqlstm.sqharm[9] = (unsigned long )0;
sqlstm.sqadto[9] = (unsigned short )0;
sqlstm.sqtdso[9] = (unsigned short )0;
sqlstm.sqhstv[10] = (unsigned char *)process_name;
sqlstm.sqhstl[10] = (unsigned long )18;
sqlstm.sqhsts[10] = ( int )0;
sqlstm.sqindv[10] = ( short *)0;
sqlstm.sqinds[10] = ( int )0;
sqlstm.sqharm[10] = (unsigned long )0;
sqlstm.sqadto[10] = (unsigned short )0;
sqlstm.sqtdso[10] = (unsigned short )0;
sqlstm.sqhstv[11] = (unsigned char *)process_name;
sqlstm.sqhstl[11] = (unsigned long )18;
sqlstm.sqhsts[11] = ( int )0;
sqlstm.sqindv[11] = ( short *)0;
sqlstm.sqinds[11] = ( int )0;
sqlstm.sqharm[11] = (unsigned long )0;
sqlstm.sqadto[11] = (unsigned short )0;
sqlstm.sqtdso[11] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
if(sqlca.sqlcode < 0) {
log_printf(LOG_ERROR, "Database insert BJ_T_ODR_TRN_MEI error%s%", sqlca.sqlerrm.sqlerrmc);
/*** mod 2019/10/7 start ***/
/* EXEC SQL ROLLBACK WORK;*/
/* if (retry_count < MAX_SQL_RETRY) {*/
/* sleep(SQL_RETRY_TIMER);*/
/* retry_count++;*/
/* } else {*/
/* abort();*/
/* }*/
if (retry_count < MAX_INS_RETRY) {
sleep(SQL_RETRY_TIMER);
retry_count++;
} else {
return -1;
}
/*** mod 2019/10/7 end ***/
} else {
sqldone = YES;
}
}
return 0;
}
/******************************************************************************
締め処理(締め処理用の値を設定する)
返り値 0 : OK
******************************************************************************/
int store_order_closing(char *trn_file_id)
{
_TRACE_(10, (""));
_TRACE_(10, ("trn_file_id [%s]", trn_file_id));
/* 発注キュー及び発注トランヘッダ用ホスト変数の初期化 */
memset(&trn_head, 0, sizeof(trn_head));
/* トランファイルIDのホスト変数への格納 */
strncpy(trn_head.trn_file_id, trn_file_id, LEN_TRN_FILE_ID);
/* それ以外の値へのスペースの格納 */
memset(trn_head.hchiku_head, ' ', LEN_HCHIKU);
memset(trn_head.tenban_head, ' ', LEN_TENBAN);
memset(trn_head.rcv_date, ' ', LEN_RCV_DATE);
memset(trn_head.rcv_time, ' ', LEN_RCV_TIME);
return 0;
}
/******************************************************************************
プログラムIDを設定する
******************************************************************************/
void store_set_process_name(const char *name)
{
_TRACE_(10, ("name [%s]", name));
/* プログラムIDのホスト変数への格納 */
strncpy(process_name, name, LEN_PG_ID);
}
/******************************************************************************
データベース名を設定する
******************************************************************************/
void store_set_name(const char *db_name)
{
_TRACE_(0, ("db_name [%s]", db_name));
/* データベース名のホスト変数への格納 */
strncpy(dbname, db_name, DB_NAME_LEN);
}
/******************************************************************************
ユーザとパスワードを設定する
******************************************************************************/
void store_set_user(const char *db_user, const char *db_password)
{
_TRACE_(0, ("db_user [%s]", db_user));
_TRACE_(0, ("db_password [%s]", db_password));
/* ユーザのホスト変数への格納 */
strncpy(username, db_user, DB_USERNAME_LEN);
/* パスワードのホスト変数への格納 */
strncpy(password, db_password, DB_PASSWORD_LEN);
}
oracle转postgre 这个文件怎么改
最新发布