/* @tier medium @module cm @transform common-online */ /* * cm_ol_0010.pgc - 공통코드 캐시 로더 서비스 (CM_OL_0010) [tier=medium] * * 요청의 코드그룹(GRP)에 속한 유효 공통코드를 커서로 전량 순회하며 * 로드 건수를 집계한다. 첫 코드/마지막 코드를 함께 반환하여 캐시 * 적재 결과를 확인할 수 있게 한다. (기동 시 캐시 워밍업 용도) * (ATMI void SVC(TPSVCINFO*) 대응) */ #include #include #include "txcore.h" #include "txcore_dbio.h" #include "acq_util.h" #include "cm_core.h" EXEC SQL INCLUDE sqlca; TX_SERVICE(CM_OL_0010, ctx) { EXEC SQL BEGIN DECLARE SECTION; char h_grp[16]; char h_code[16]; char h_name[64]; EXEC SQL END DECLARE SECTION; char grp[16]; char first_code[16]; char last_code[16]; long loaded; int cur_open; tx_log(TX_LOG_INFO, "[CM_OL_0010] 공통코드 캐시 로더 서비스 진입"); memset(grp, 0, sizeof(grp)); memset(first_code, 0, sizeof(first_code)); memset(last_code, 0, sizeof(last_code)); loaded = 0; cur_open = 0; if (tx_buf_get(ctx->in, "GRP", grp, sizeof(grp)) != TX_OK) { tx_log(TX_LOG_ERROR, "[CM_OL_0010] 코드그룹(GRP) 누락"); tx_return(ctx, TX_EINVAL, ctx->out); return; } memset(h_grp, 0, sizeof(h_grp)); strncpy(h_grp, grp, sizeof(h_grp) - 1); EXEC SQL DECLARE cur_code CURSOR FOR SELECT code_cd, code_name FROM cm_code WHERE grp_cd = :h_grp AND use_yn = 'Y' ORDER BY sort_no, code_cd; EXEC SQL OPEN cur_code; if (sqlca.sqlcode != TX_SQL_OK) { TX_DBIO_LOG_ERR("CM_OL_0010 OPEN cur_code"); tx_return(ctx, TX_EDB, ctx->out); return; } cur_open = 1; for (;;) { memset(h_code, 0, sizeof(h_code)); memset(h_name, 0, sizeof(h_name)); EXEC SQL FETCH cur_code INTO :h_code, :h_name; if (sqlca.sqlcode == TX_SQL_NOTFOUND) { break; } if (sqlca.sqlcode != TX_SQL_OK) { TX_DBIO_LOG_ERR("CM_OL_0010 FETCH cur_code"); EXEC SQL CLOSE cur_code; tx_return(ctx, TX_EDB, ctx->out); return; } if (loaded == 0) { strncpy(first_code, h_code, sizeof(first_code) - 1); } strncpy(last_code, h_code, sizeof(last_code) - 1); loaded++; } if (cur_open) { EXEC SQL CLOSE cur_code; } if (loaded == 0) { tx_log(TX_LOG_WARN, "[CM_OL_0010] 적재 대상 없음 grp=%s", grp); tx_return(ctx, TX_ENOENT, ctx->out); return; } tx_buf_reset(ctx->out); tx_buf_sets(ctx->out, "GRP", grp); tx_buf_setlong(ctx->out, "LOADCNT", loaded); tx_buf_sets(ctx->out, "FIRSTCODE", first_code); tx_buf_sets(ctx->out, "LASTCODE", last_code); tx_log(TX_LOG_INFO, "[CM_OL_0010] 캐시적재 완료 grp=%s 건수=%ld", grp, loaded); tx_return(ctx, TX_OK, ctx->out); }