/* @tier easy @module vl @transform validation-online */ /* * vl_ol_0028.pgc - 오류내역 조회 서비스 (VL_OL_0028) [tier=easy] * * 입력 에러코드로 오류로그(vl_error_log) 의 최근 1건(발생일시/사유/처리키) * 을 조회하여 응답한다. */ #include #include #include #include "txcore.h" #include "txcore_dbio.h" #include "acq_util.h" #include "vl_core.h" EXEC SQL INCLUDE sqlca; TX_SERVICE(VL_OL_0028, ctx) { EXEC SQL BEGIN DECLARE SECTION; char h_errcode[8]; char h_occur_dt[15]; char h_reason[128]; char h_ref_key[16]; EXEC SQL END DECLARE SECTION; char errcode[8]; tx_log(TX_LOG_INFO, "[VL_OL_0028] 오류내역 조회 서비스 진입"); if (tx_buf_get(ctx->in, "ERRCODE", errcode, sizeof(errcode)) != TX_OK) { tx_log(TX_LOG_ERROR, "[VL_OL_0028] 조회 에러코드(ERRCODE) 누락"); tx_buf_sets(ctx->out, "ERRCODE", "VL2800"); tx_return(ctx, TX_EINVAL, ctx->out); return; } if (strlen(errcode) == 0) { tx_log(TX_LOG_WARN, "[VL_OL_0028] 에러코드 공백"); tx_buf_sets(ctx->out, "ERRCODE", "VL2801"); tx_return(ctx, TX_EINVAL, ctx->out); return; } strncpy(h_errcode, errcode, sizeof(h_errcode) - 1); h_errcode[sizeof(h_errcode) - 1] = '\0'; memset(h_occur_dt, 0, sizeof(h_occur_dt)); memset(h_reason, 0, sizeof(h_reason)); memset(h_ref_key, 0, sizeof(h_ref_key)); EXEC SQL SELECT occur_dt, reason, ref_key INTO :h_occur_dt, :h_reason, :h_ref_key FROM vl_error_log WHERE err_code = :h_errcode ORDER BY occur_dt DESC FETCH FIRST 1 ROW ONLY; if (sqlca.sqlcode == TX_SQL_NOTFOUND) { tx_log(TX_LOG_INFO, "[VL_OL_0028] 오류내역 없음 code=%s", errcode); tx_buf_reset(ctx->out); tx_buf_sets(ctx->out, "QUERYCODE", errcode); tx_buf_sets(ctx->out, "RESULT", "NONE"); tx_buf_sets(ctx->out, "ERRCODE", "VL2802"); tx_return(ctx, TX_ENOENT, ctx->out); return; } if (sqlca.sqlcode != TX_SQL_OK) { TX_DBIO_LOG_ERR("SELECT vl_error_log"); tx_buf_sets(ctx->out, "ERRCODE", "VL2809"); tx_return(ctx, TX_EDB, ctx->out); return; } tx_buf_reset(ctx->out); tx_buf_sets(ctx->out, "QUERYCODE", errcode); tx_buf_sets(ctx->out, "OCCURDT", h_occur_dt); tx_buf_sets(ctx->out, "REASON", h_reason); tx_buf_sets(ctx->out, "REFKEY", h_ref_key); tx_buf_sets(ctx->out, "RESULT", "FOUND"); tx_buf_sets(ctx->out, "ERRCODE", RESP_OK); tx_log(TX_LOG_INFO, "[VL_OL_0028] 오류내역 조회 code=%s dt=%s key=%s", errcode, h_occur_dt, h_ref_key); tx_return(ctx, TX_OK, ctx->out); }