한책임..
그동안 수고가 많았습니다.
내가 회사를 떠나면서 마지막으로 부탁하는 것이니 자세히 읽어 봐 주길 바래요..
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
'프로그램언어 > Proframe' 카테고리의 다른 글
프로프레임의 가변배열(Varray) 사용 (0) | 2010.08.27 |
---|---|
제우스 동작 멈춤 상태 (0) | 2010.08.27 |
code inspection (0) | 2010.08.27 |
DBIO 에서 VIEW 출력변수 생성 팁 (0) | 2010.08.27 |
HP 장비의 make 시간이 IBM 장비 보다 오래 걸리는 현상 (0) | 2010.08.27 |