728x90

한책임..
 
그동안 수고가 많았습니다.  
내가 회사를 떠나면서 마지막으로 부탁하는 것이니 자세히 읽어 봐 주길 바래요..
 
 
DBIO 출력값을 출력변수로 MOVE 하는 소스는 strcpy 를 사용되고 있으나 보통의 경우 문제는 없다.
그러나  date 타입을 string(14) 로 출력시킬 경우에는 문제가 발생됩니다.
개발자가  일일이 to_char(ls_chg_dtm, 'YYYYMMDDHH24MISS')  과 같이 조작하여 출력할 수도 있겠고 dbms 의 date 타입의 출력 포맷을 고칠 수도 있겠으나
농협에서는 절충안 으로 date 타입을 그냥  char(14) 에 담고 그 데이타는 사용하지 않는 것으로 개발해 왔습니다..
 
문제는 출력변수를 move 하는 과정에서 strcpy 를 사용하면서 데이타가 깨져서 나오기 때문에 strncpy 를 사용해 주시길 요청합니다.

     24 static void _out_data_copy(_pdb_sample_edu_acct_ps215_out_t *s, PfmDbiosample_edu_acct_ps215Output *t) {
     25
     26          strcpy( t->cuno, (char*)s->cuno.arr );
     27          strcpy( t->acno, (char*)s->acno.arr );
     28          t->jan_amt = s->jan_amt;
     29          strcpy( t->tr_dt, (char*)s->tr_dt.arr );
     30          strcpy( t->lschg_dtm, (char*)s->lschg_dtm.arr  );
     31          strcpy( t->ls_cmeno, (char*)s->ls_cmeno.arr  );
     32
     33          PFM_DBG(" t->lschg_dtm=[%s], s->lschg_dtm.arr=[%s]", t->lschg_dtm, (char*)s->lschg_dtm.arr );
     34          PFM_DBG(" t->ls_cmeno =[%s], s->ls_cmeno.arr =[%s]", t->ls_cmeno, (char*)s->ls_cmeno.arr );
     35 }
 
  17779  :validation_proc                    :00129] >> PFMTRY [pfmDbioSelect("sample_edu_acct_ps215", &] 입구
  17780  :pfmAnalysisLogging                 :00102] DB EXEC SQL Query Elapse Time : [0 s / 623 ms] - mapid [sample_edu_acct_ps215] : DML [SELECT] - Error No[0] Record Count[1]
  17781 e:_out_data_copy                     :00033]  t->lschg_dtm=[2008-05-17 19:1pfmtcl123], s->lschg_dtm.arr=[2008-05-17 19:1]
  17782 e:_out_data_copy                     :00034]  t->ls_cmeno =[pfmtcl123], s->ls_cmeno.arr =[pfmtcl123]
  17783  :validation_proc                    :00129] << PFMTRY [pfmDbioSelect("sample_edu_acct_ps215", &] 출구 RC [0] TIME [00.005934]
  17784  :validation_proc                    :00135] ================================
  17785  :validation_proc                    :00135] sample_edu_acct_ps215Out
  17786  :validation_proc                    :00135] --------------------------------
  17787  :validation_proc                    :00135] cuno : cuno = [8000000011]
  17788  :validation_proc                    :00135] 계좌번호 : acno = [AC80000000]
  17789  :validation_proc                    :00135] 잔액 : jan_amt = [10]
  17790  :validation_proc                    :00135] 거래일자 : tr_dt = []
  17791  :validation_proc                    :00135] 최종변경자개인번호 : ls_cmeno = [2008-05-17 19:1pfmtcl123]
  17792  :validation_proc                    :00135] 최종변경일시 : lschg_dtm = [ 19:1pfmtcl123]
  17793  :validation_proc                    :00135] ================================
 
     24 static void _out_data_copy(_pdb_sample_edu_acct_ps215_out_t *s, PfmDbiosample_edu_acct_ps215Output *t) {
     25
     26          strncpy( t->cuno, (char*)s->cuno.arr, LEN_SAMPLE_EDU_ACCT_PS215_CUNO_O );
     27          strncpy( t->acno, (char*)s->acno.arr, LEN_SAMPLE_EDU_ACCT_PS215_ACNO_O );
     28          t->jan_amt = s->jan_amt;
     29          strcpy( t->tr_dt, (char*)s->tr_dt.arr, LEN_SAMPLE_EDU_ACCT_PS215_TR_DT_O );
     30          strncpy( t->lschg_dtm, (char*)s->lschg_dtm.arr, LEN_SAMPLE_EDU_ACCT_PS215_LSCHG_DTM_O );
     31          strncpy( t->ls_cmeno, (char*)s->ls_cmeno.arr, LEN_SAMPLE_EDU_ACCT_PS215_LS_CMENO_O );
     32
     33          PFM_DBG(" t->lschg_dtm=[%s], s->lschg_dtm.arr=[%s]", t->lschg_dtm, (char*)s->lschg_dtm.arr );
     34          PFM_DBG(" t->ls_cmeno =[%s], s->ls_cmeno.arr =[%s]", t->ls_cmeno, (char*)s->ls_cmeno.arr );
     35 }
    
    
  21211  :validation_proc                    :00129] >> PFMTRY [pfmDbioSelect("sample_edu_acct_ps215", &] 입구
  21212  :pfmAnalysisLogging                 :00102] DB EXEC SQL Query Elapse Time : [0 s / 661 ms] - mapid [sample_edu_acct_ps215] : DML [SELECT] - Error No[0] Record Count[1]
  21213 e:_out_data_copy                     :00033]  t->lschg_dtm=[2008-05-17 19:], s->lschg_dtm.arr=[2008-05-17 19:1]
  21214 e:_out_data_copy                     :00034]  t->ls_cmeno =[pfmtcl123], s->ls_cmeno.arr =[pfmtcl123]
  21215  :validation_proc                    :00129] << PFMTRY [pfmDbioSelect("sample_edu_acct_ps215", &] 출구 RC [0] TIME [00.003237]
  21216  :validation_proc                    :00135] ================================
  21217  :validation_proc                    :00135] sample_edu_acct_ps215Out
  21218  :validation_proc                    :00135] --------------------------------
  21219  :validation_proc                    :00135] cuno : cuno = [8000000011]
  21220  :validation_proc                    :00135] 계좌번호 : acno = [AC80000000]
  21221  :validation_proc                    :00135] 잔액 : jan_amt = [10]
  21222  :validation_proc                    :00135] 거래일자 : tr_dt = []
  21223  :validation_proc                    :00135] 최종변경일시 : lschg_dtm = [2008-05-17 19:]
  21224  :validation_proc                    :00135] 최종변경자개인번호 : ls_cmeno = [pfmtcl123]
  21225  :validation_proc                    :00135] ================================
 
 
이 때 사용되는 SQL 은 다음과 같으며 여기서  LSCHG_DTM 은 DATE 타입입니다.

     77         EXEC SQL SELECT  /*+ map_id(sample_edu_acct_ps215) */ CUNO
     78                         , ACNO
     79                         , JAN_AMT
     80                         , TR_DT
     81                         , LSCHG_DTM
     82                         , LS_CMENO
     83         INTO :pdb_out
     84         FROM SAMPLE_EDU_ACCT
     85         WHERE cuno = :pdb_in.cuno
     86         ;
 
 
 
     14 struct _pdb_sample_edu_acct_ps215_out_s {
     15     varchar cuno[LEN_SAMPLE_EDU_ACCT_PS215_CUNO_O+1];
     16     varchar acno[LEN_SAMPLE_EDU_ACCT_PS215_ACNO_O+1];
     17     long jan_amt;
     18     varchar tr_dt[LEN_SAMPLE_EDU_ACCT_PS215_TR_DT_O+1];
     19     varchar lschg_dtm[LEN_SAMPLE_EDU_ACCT_PS215_LSCHG_DTM_O+1];
     20     varchar ls_cmeno[LEN_SAMPLE_EDU_ACCT_PS215_LS_CMENO_O+1];
     21 };

출처 : http://pangate.com/51

+ Recent posts