• 고객센터
  • 교육
  • 매뉴얼
  • 데모
  • 제품소개
조회 수 : 4162
2007.11.26 (22:31:18)
>* 고객시스템명 : A/S 시스템
>* TOInB 버전 : 5.x
>* 서버 Platform : Window
>* 문의 유형(질문/요청/참조) : SO 에러시 에러 정보 DB 저장 및 DB 트렌젝션 문의
>* 내용
>
> 1. SO 에서의 에러정보 DB 저장
>
> 작성된 SO 에서 에러발생시 에러정보(TBL_ERROR_CODE, TBL_ERROR_MSG, 기타..) 를 DB 에 저장하려 합니다.
> 이를 위해 에러정보 테이블과 해당 테이블에 값을 저장할 공용 SO (SO 'ErrorWrite') 를 만들었습니다.
>
> - 대상 SO에서 TB_on_error() 에 다음과 같은 형태로 기술
>
>    (1) 파일 로그 기록
>       TBL_Prn(tb_stderr, "TBL_ERROR_CODE[%d] : %s",  TBL_ERROR_CODE, TBL_ERROR_MSG);
>                        
>    (2) 데이터 테이블 생성(ErrInfo)
>
>    (3) SO 'ErrorWrite' 의 input1 포멧에 맞게 TBL_SetFormat() 함수 사용
>
>    (4) 데이터 테이블 에 값 셋팅 ( TBL_PutColumnString(), TBL_PutColumnString()... 사용)
>
>    (5) Row 삽입 ( TBL_InsertRow() )
>
>    (6) 해당 SO 'ErrorWrite' 호출 ( TBL_ExecLocalObject() 사용 )
>
>    (7) 데이터 테이블 삭제 ( 'ErrInfo' , TBL_DeleteDatatable() 사용 )
>
> - 상기와 같이 기술하여 대상 SO 를 컴파일 후 에러를 발생시키면 정상적으로 에러정보 기록 SO 를 호출합니다.
>
>   다만, 대상 SO 에서 에러가 발생한 관계로 TBL_ExecLocalObject()를 사용하여 호출한 에러정보 기록 SO 또한 트렌젝션에서 롤백 처리가 되어  정상적으로 DB 에 저장이 되지 않습니다.
>
> - 해결 방안
>  
>   에러정보 기록 SO ('ErrorWrite') 에서 SO 시작전 롤백 함수( TBL_Rollback() ) 를 수행하여 피호출 SO 에서 발생한 DB트랜젝션을 롤백한 후  에러정보를 DB 에 저장하고 커밋 함수 ( TBL_Commit() ) 를 실행하고자 합니다.
>
> - 고려사항 (문의사항)
>
>   a. 위 로직대로 처리할 경우 혹 제대로 DB 트랜젝션 관리가 안 된다거나 동시에 다른 SO에서 발생된 에러(롤백되어야 할 데이터)까지 커밋될 가능성은 없는지요.
>   b. 위 로직이 혹시 토인비의 트렌젝션 관리 기준에 위배되거나 하진 않는지요.
>   c. 과연 위의 로직이 의도한 바대로 제대로 동작할 지요.

[답변 SO간의 처리]
토인비의 경우 명시적으로 AutoCommit을 사용하고 있습니다.
그러나 위와 같이 TBL_Rollback() TBL_Commit()을 사용하는 경우 즉시 COMMIT, ROLLBACK이 된다고 보시면 됩니다.
그리고 토인비 내부에서 사용되는 Autocommit을 사용하는 경우
SO 내부에서 처리된 SQL은 에러시 자동으로 ROLLBACK 됩니다.
SO에서 SO CALL을 통하여 처리된 서비스의 경우도 동일 하다고 보시면 됩니다.
즉 SO1 -> SO2 를 호출한 경우 SO2에서 에러가 발생된 경우
SO1으로 ERROR를 RETURN하여 ROLLBACK 처리를 하여야 합니다.
이부분은 2. S2_Server Part_021209.doc 메뉴얼에 설명이 잘나와 있습니다.
[문서 다운로드]
http://www.gauce.com/download.php?id=toinbdown&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=14&filenum=1


>
>
>
> 2. 트렌젝션 문의
>
>  하나의 SO 에서 수행된 모든 PL-SQL 문과 select_sql, insert_sql, update_sql 등은 하나의 트렌젝션으로서 관리가 되는지 궁금합니다.
[답변]
SO내부에서 수행된 SQL및 PL-SQL의 경우 전체가 하나의 SESSION으로 유지가 됩니다. 즉 명시적인 Auto Commit이 된다고 보시면 됩니다.

>  또한 위 1번 문의사항과 같이 로컬 혹은 원격지의 호출된 SO 까지 하나의 DB트렌젝션 으로서 관리되고 있는 것인지 또한 의문사항입니다.
[답변]
위의 답변에 기술되어 있습니다. SO 간의 FAIL에 따른 처리를 하여야 합니다. 즉 SO1이 SO2를 호출 하였으면 SO2의 FAIL로 SO1또한 FAIL 처리 되며 이는 return 값에 따른 TB_FAIL이 return 되어 autocommit 되어야 합니다.

>  SO 내 event 함수 내 SQL 실행 문 또는 PL-SQL 수행시 ROLLBACK; 또는 COMMIT; 이라고 명시적으로 주시 않아도 토인비에서 자동적으로 이러한 DB 트랜젝션이 롤백과 커밋을 일으키는 것인 지 또한 궁금합니다.
[답변]
위에서도 언급하였듯이 명시적으로 AUTOCOMMIT 이 됩니다. TBL_Commit 등을 사용하지 않는한...

>
>
> * 관련된 메뉴얼을 찾아 이러한 부분을 충족할 수 있겠지만 검색 공력이 작아 찾지 못하고 이렇게 문의드립니다.
>   부디 좋은 답변 부탁드리겠습니다.
>

좀더 자세한 사항은 위에 링크한 문서를 참고하거나 문의전화 2106-1791  로 문의를 하여 주시기 바랍니다.
번호 제목 닉네임 조회 등록일
317 no image TBL_DatasetGetColStr 함수 에러
박수정
4052 2008-02-15
316 no image TBL_DatasetGetColStr 함수 에러 [1]
박수정
4113 2008-02-15
315 no image TBL_DatasetGetColStr 함수 에러 [1]
관리자
4868 2008-02-15
314 no image TBL_DatasetGetColStr 함수 에러 [1]
관리자
3939 2008-02-15
tbl_lib library가 인식이 되지 않아 문제가 있는 듯 합니다. toinb/include/TB_TBL_lib.h 파일이 존재하는데 여기 보시면 아래와 같이 TBL_DatasetGetColStr 함수가 선언이 되어 있습니다. 이 함수는 토인비 TBL Library 에 포함이 되어 있고 정상적으로 토인비 서비스 그룹이 올라 왔으면 문제가 없이 컴파일이 되고 실행이 될 것입니다. 그러나 tbl library (toinb/lib 폴더에 있음)가 정상적으로 올라오지 않으면 아래와 같은 에러가 발생할 것입니다. 서비스그룹.conf(toinb/conf 폴더에 있음) 파일에 있는 TBL_library 부분을 보시면 tbl library 이름이 정상적인지 그리고 toinb/lib에 있는 tbl library가 정상적인지 확인을 해보시기 바랍니다. #define _TBL_DatasetGetColStr ((TBL_DATASET_GETCOLSTR *)TB_MT_GetMember(spgv,"TBL_DISTRI_LIB_SO","TBL_dataset_getcolstr")) #define TBL_DatasetGetColStr(a,b,c,d,e,f) _TBL_DatasetGetColStr(mine,a,b,c,d,e,f) >게시판을 이용해 주셔서 감사합니다. >다음양식에 맞게 입력해주세요. > >* 고객시스템명 : 삼성SDI 전자총SFC >* TOInB 버전 : 4.0.1.2.3 >* 서버 Platform : >* 문의 유형(질문/요청/참조) : 질문 >* 내용 : >SOB에서 TBL_DatasetGetColStr을 호출하면, >TBL_DatasetGetColStr("input1", 1, "ITrayValue", ls_eptray_info, 6000, TB_STRING); > >아래와 같이 에러가 나면서 함수사용이 안됩니다. > >[SE-33604:bizint_DecodeEpTray] ERROR: The corresponding OBJECT does not exist in OBJECT TABLE. (OBJECT: user_tbl_lib) > >[SE-36614:bizint_DecodeEpTray] ERROR: The following MEMBER does not exist in the MEMBER TABLE. (MEMBER TABLE: bizint_De >codeEpTray, MEMBER: TBL_dataset_getcolstr)
313 no image 프린트가 에러납니다.
조한두
3945 2008-02-14
312 no image 프린트가 에러납니다. [1]
기술지원44
3930 2008-02-25
311 no image 현재 토인비 3년 정도 되었는데요 빌드가 새로 나온걸로 알고있는데요. 업그레이드?
조한두
3982 2008-02-14
310 no image 현재 토인비 3년 정도 되었는데요 빌드가 새로 나온걸로 알고있는데요. 업그레이드? [1]
기술지원44
4039 2008-02-25
309 no image DATASET의 CrossTab기능 파일
도영곤
4024 2007-11-07
308 no image DATASET의 CrossTab기능 [1]
관리자
4101 2007-11-08
307 no image SO 에러시 에러 정보 DB 저장 및 트렌젝션 문의 [1]
황우상
4061 2007-11-05
* 고객시스템명 : A/S 시스템 * TOInB 버전 : 5.x * 서버 Platform : Window * 문의 유형(질문/요청/참조) : SO 에러시 에러 정보 DB 저장 및 DB 트렌젝션 문의 * 내용 1. SO 에서의 에러정보 DB 저장 작성된 SO 에서 에러발생시 에러정보(TBL_ERROR_CODE, TBL_ERROR_MSG, 기타..) 를 DB 에 저장하려 합니다. 이를 위해 에러정보 테이블과 해당 테이블에 값을 저장할 공용 SO (SO 'ErrorWrite') 를 만들었습니다. - 대상 SO에서 TB_on_error() 에 다음과 같은 형태로 기술 (1) 파일 로그 기록 TBL_Prn(tb_stderr, "TBL_ERROR_CODE[%d] : %s", TBL_ERROR_CODE, TBL_ERROR_MSG); (2) 데이터 테이블 생성(ErrInfo) (3) SO 'ErrorWrite' 의 input1 포멧에 맞게 TBL_SetFormat() 함수 사용 (4) 데이터 테이블 에 값 셋팅 ( TBL_PutColumnString(), TBL_PutColumnString()... 사용) (5) Row 삽입 ( TBL_InsertRow() ) (6) 해당 SO 'ErrorWrite' 호출 ( TBL_ExecLocalObject() 사용 ) (7) 데이터 테이블 삭제 ( 'ErrInfo' , TBL_DeleteDatatable() 사용 ) - 상기와 같이 기술하여 대상 SO 를 컴파일 후 에러를 발생시키면 정상적으로 에러정보 기록 SO 를 호출합니다. 다만, 대상 SO 에서 에러가 발생한 관계로 TBL_ExecLocalObject()를 사용하여 호출한 에러정보 기록 SO 또한 트렌젝션에서 롤백 처리가 되어 정상적으로 DB 에 저장이 되지 않습니다. - 해결 방안 에러정보 기록 SO ('ErrorWrite') 에서 SO 시작전 롤백 함수( TBL_Rollback() ) 를 수행하여 피호출 SO 에서 발생한 DB트랜젝션을 롤백한 후 에러정보를 DB 에 저장하고 커밋 함수 ( TBL_Commit() ) 를 실행하고자 합니다. - 고려사항 (문의사항) a. 위 로직대로 처리할 경우 혹 제대로 DB 트랜젝션 관리가 안 된다거나 동시에 다른 SO에서 발생된 에러(롤백되어야 할 데이터)까지 커밋될 가능성은 없는지요. b. 위 로직이 혹시 토인비의 트렌젝션 관리 기준에 위배되거나 하진 않는지요. c. 과연 위의 로직이 의도한 바대로 제대로 동작할 지요. 2. 트렌젝션 문의 하나의 SO 에서 수행된 모든 PL-SQL 문과 select_sql, insert_sql, update_sql 등은 하나의 트렌젝션으로서 관리가 되는지 궁금합니다. 또한 위 1번 문의사항과 같이 로컬 혹은 원격지의 호출된 SO 까지 하나의 DB트렌젝션 으로서 관리되고 있는 것인지 또한 의문사항입니다. SO 내 event 함수 내 SQL 실행 문 또는 PL-SQL 수행시 ROLLBACK; 또는 COMMIT; 이라고 명시적으로 주시 않아도 토인비에서 자동적으로 이러한 DB 트랜젝션이 롤백과 커밋을 일으키는 것인 지 또한 궁금합니다. * 관련된 메뉴얼을 찾아 이러한 부분을 충족할 수 있겠지만 검색 공력이 작아 찾지 못하고 이렇게 문의드립니다. 부디 좋은 답변 부탁드리겠습니다.
Selected no image SO 에러시 에러 정보 DB 저장 및 트렌젝션 문의 [1]
관리자
4162 2007-11-26
>* 고객시스템명 : A/S 시스템 >* TOInB 버전 : 5.x >* 서버 Platform : Window >* 문의 유형(질문/요청/참조) : SO 에러시 에러 정보 DB 저장 및 DB 트렌젝션 문의 >* 내용 > > 1. SO 에서의 에러정보 DB 저장 > > 작성된 SO 에서 에러발생시 에러정보(TBL_ERROR_CODE, TBL_ERROR_MSG, 기타..) 를 DB 에 저장하려 합니다. > 이를 위해 에러정보 테이블과 해당 테이블에 값을 저장할 공용 SO (SO 'ErrorWrite') 를 만들었습니다. > > - 대상 SO에서 TB_on_error() 에 다음과 같은 형태로 기술 > > (1) 파일 로그 기록 > TBL_Prn(tb_stderr, "TBL_ERROR_CODE[%d] : %s", TBL_ERROR_CODE, TBL_ERROR_MSG); > > (2) 데이터 테이블 생성(ErrInfo) > > (3) SO 'ErrorWrite' 의 input1 포멧에 맞게 TBL_SetFormat() 함수 사용 > > (4) 데이터 테이블 에 값 셋팅 ( TBL_PutColumnString(), TBL_PutColumnString()... 사용) > > (5) Row 삽입 ( TBL_InsertRow() ) > > (6) 해당 SO 'ErrorWrite' 호출 ( TBL_ExecLocalObject() 사용 ) > > (7) 데이터 테이블 삭제 ( 'ErrInfo' , TBL_DeleteDatatable() 사용 ) > > - 상기와 같이 기술하여 대상 SO 를 컴파일 후 에러를 발생시키면 정상적으로 에러정보 기록 SO 를 호출합니다. > > 다만, 대상 SO 에서 에러가 발생한 관계로 TBL_ExecLocalObject()를 사용하여 호출한 에러정보 기록 SO 또한 트렌젝션에서 롤백 처리가 되어 정상적으로 DB 에 저장이 되지 않습니다. > > - 해결 방안 > > 에러정보 기록 SO ('ErrorWrite') 에서 SO 시작전 롤백 함수( TBL_Rollback() ) 를 수행하여 피호출 SO 에서 발생한 DB트랜젝션을 롤백한 후 에러정보를 DB 에 저장하고 커밋 함수 ( TBL_Commit() ) 를 실행하고자 합니다. > > - 고려사항 (문의사항) > > a. 위 로직대로 처리할 경우 혹 제대로 DB 트랜젝션 관리가 안 된다거나 동시에 다른 SO에서 발생된 에러(롤백되어야 할 데이터)까지 커밋될 가능성은 없는지요. > b. 위 로직이 혹시 토인비의 트렌젝션 관리 기준에 위배되거나 하진 않는지요. > c. 과연 위의 로직이 의도한 바대로 제대로 동작할 지요. [답변 SO간의 처리] 토인비의 경우 명시적으로 AutoCommit을 사용하고 있습니다. 그러나 위와 같이 TBL_Rollback() TBL_Commit()을 사용하는 경우 즉시 COMMIT, ROLLBACK이 된다고 보시면 됩니다. 그리고 토인비 내부에서 사용되는 Autocommit을 사용하는 경우 SO 내부에서 처리된 SQL은 에러시 자동으로 ROLLBACK 됩니다. SO에서 SO CALL을 통하여 처리된 서비스의 경우도 동일 하다고 보시면 됩니다. 즉 SO1 -> SO2 를 호출한 경우 SO2에서 에러가 발생된 경우 SO1으로 ERROR를 RETURN하여 ROLLBACK 처리를 하여야 합니다. 이부분은 2. S2_Server Part_021209.doc 메뉴얼에 설명이 잘나와 있습니다. [문서 다운로드] http://www.gauce.com/download.php?id=toinbdown&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=14&filenum=1 > > > > 2. 트렌젝션 문의 > > 하나의 SO 에서 수행된 모든 PL-SQL 문과 select_sql, insert_sql, update_sql 등은 하나의 트렌젝션으로서 관리가 되는지 궁금합니다. [답변] SO내부에서 수행된 SQL및 PL-SQL의 경우 전체가 하나의 SESSION으로 유지가 됩니다. 즉 명시적인 Auto Commit이 된다고 보시면 됩니다. > 또한 위 1번 문의사항과 같이 로컬 혹은 원격지의 호출된 SO 까지 하나의 DB트렌젝션 으로서 관리되고 있는 것인지 또한 의문사항입니다. [답변] 위의 답변에 기술되어 있습니다. SO 간의 FAIL에 따른 처리를 하여야 합니다. 즉 SO1이 SO2를 호출 하였으면 SO2의 FAIL로 SO1또한 FAIL 처리 되며 이는 return 값에 따른 TB_FAIL이 return 되어 autocommit 되어야 합니다. > SO 내 event 함수 내 SQL 실행 문 또는 PL-SQL 수행시 ROLLBACK; 또는 COMMIT; 이라고 명시적으로 주시 않아도 토인비에서 자동적으로 이러한 DB 트랜젝션이 롤백과 커밋을 일으키는 것인 지 또한 궁금합니다. [답변] 위에서도 언급하였듯이 명시적으로 AUTOCOMMIT 이 됩니다. TBL_Commit 등을 사용하지 않는한... > > > * 관련된 메뉴얼을 찾아 이러한 부분을 충족할 수 있겠지만 검색 공력이 작아 찾지 못하고 이렇게 문의드립니다. > 부디 좋은 답변 부탁드리겠습니다. > 좀더 자세한 사항은 위에 링크한 문서를 참고하거나 문의전화 2106-1791 로 문의를 하여 주시기 바랍니다.
305 no image LuxeCombo 사용시 스크롤 기능 [1]
정재일
3970 2007-10-23
304 no image LuxeCombo 사용시 스크롤 기능 [1]
관리자
3980 2007-10-24
Combo의 크기는 height=120 width="154" 에 따라 변경이 됩니다. style 을 주신 부분 즉 class="select_01" 을 확인하여 주시기 바랍니다. 문제가 해결이 되지 않을 경우 쿨센터로 문의 바랍니다. >게시판을 이용해 주셔서 감사합니다. >다음양식에 맞게 입력해주세요. > >* 고객시스템명 : >* TOInB 버전 : 5.0 >* 서버 Platform : window2003server >* 문의 유형(질문/요청/참조) : 질문 >* 내용 : >LuxeCombo 사용시에 스크롤이 생기게 했으면 합니다. > >현재 LuxeCombo 사용시에는 참조한 dataset에 모든 row가 출력되어 집니다. > >때문에 window창에 크기를 넘어서 까지 리스트가 펼쳐 지고 있습니다. > >고로 위쪽에 row를 보기 위해서는 창을 밑으로 끌어 내려야 하는 상황 입니다. > >예제를 모면 스크롤이 생기는 것을 볼 수 있었는대요. > >LuxeCombo 설정시 이에 관해서 지정해야 하는 항목이 있는지요. > >현재 적용 설정: > ><td class="bg_SE02"> > <comment id="__NSID__"> > <object id="sDept" classid="CLSID:D8BCC087-4710-427D-B2E4-A4B93B6EA197" style="background-color: #FCFBF9;border:0 solid #999999;" class="select_01" tabindex="0" height=120 width="154"> > <param name="ComboDataID" value="ds_code_dept"> > <param name="SearchColumn" value="DEPT_NM"> > <param name="Sort" value="false"> > <param name="ListExprFormat" value="DEPT_NM^0^148,DEPT_CD^0^50"> > <param name="BindColumn" value="DEPT_CD"> > <param name="SyncComboData" value="true"> > <param name="Index" value="0"> > <param name="ComboStyle" value="3"> > </object> > </comment> > <Script>__ShowEmbedObject(__NSID__);</Script> ></td> >
303 no image 토인비 sob에서 변수처리 관련 [1]
박재철
4071 2007-09-21
302 no image 토인비 sob에서 변수처리 관련 [1]
관리자
4038 2007-09-28
301 no image 레포트 이미지 변환 [1]
하제욱
4182 2007-09-15
300 no image 레포트 이미지 변환 [1]
기술지원45
4024 2007-09-28
299 no image Toinb 로그가 남지 않습니다.
박수정
3915 2007-08-31
게시판을 이용해 주셔서 감사합니다. 다음양식에 맞게 입력해주세요. * 고객시스템명 : SDI 브라운관 SFC * TOInB 버전 : 4.0.1.2.3 * 서버 Platform : AIX * 문의 유형(질문/요청/참조) : toinb server log * 내용 : toinb 로그가 남지 않습니다. 다른 Service Group은 Group_TB_SE.log 에 모두 로그를 남기고 있지만, 해외법인 한곳에서만 로그가 남지않습니다. 아래와 같은 로그만 계속 남기고 있습니다. 어느부분은 확인해야 하는지 알려주세요.. ####### TB_se_ora Started [DYNAMIC] ####### ####### TB_se_ora Started [DYNAMIC] ####### ####### TB_se_ora Started [DYNAMIC] ####### ####### TB_se_ora Started [DYNAMIC] ####### ####### TB_se_ora Started [DYNAMIC] ####### ####### TB_se_ora Started [DYNAMIC] ####### ####### TB_se_ora Started [DYNAMIC] ####### ####### TB_se_ora Started [DYNAMIC] ####### [07/08/31-03:04:09 RPSTAC02_S02(119)] [07/08/31-03:04:32 RPSTAC02_S04(95)] [07/08/31-03:04:44 RPSTAC 02_S04(95)] [07/08/31-03:04:49 RPSTAC02_S04(95)] [07/08/31-03:05:17 RPSTAC02_S04(95)] [07/08/31-03:0 5:27 RPSTAC02_S04(95)] [07/08/31-03:05:37 RPSTAC02_S04(95)] [07/08/31-03:06:09 RPSTAC02_S04(95)] [07 /08/31-03:06:18 RPSTAC02_S04(95)] [07/08/31-03:06:58 RPSTAC02_S04(95)] [07/08/31-03:07:18 RPSTAC02_S 04(95)] [07/08/31-03:07:57 RPSTAC02_S04(95)] #################################################### toinb 27662 76554 0 Aug 29 - 0:00 TB_se_ora PROC_STATIC 7 unisfc_dev 0 OFF toinb 28564 55186 0 03:08:15 - 0:00 TB_som PROC_STATIC 6 unisfc 0 OFF toinb 36364 76554 0 Aug 29 - 0:00 TB_se_ora PROC_STATIC 6 unisfc_dev 0 OFF toinb 36942 70728 0 Aug 29 - 0:00 TB_som PROC_STATIC 7 unisfc_dev 0 OFF toinb 55186 1 0 03:08:15 - 0:00 TB_svcd unisfc SOM toinb 57178 88398 0 03:08:13 - 0:01 TB_se_ora PROC_STATIC 10 unisfc 0 OFF toinb 65396 68616 2 03:13:44 pts/6 0:00 grep unisfc toinb 66136 88398 0 03:08:13 - 0:04 TB_se_ora PROC_STATIC 9 unisfc 0 OFF toinb 70728 1 0 Aug 29 - 0:00 TB_svcd unisfc_dev SOM toinb 73040 88398 19 03:08:13 - 1:00 TB_se_ora PROC_STATIC 6 unisfc 0 OFF toinb 73558 88398 0 03:08:13 - 0:11 TB_se_ora PROC_STATIC 8 unisfc 0 OFF toinb 76554 1 0 Aug 29 - 0:00 TB_svcd unisfc_dev SE toinb 79434 70728 0 Aug 29 - 0:00 TB_som PROC_STATIC 6 unisfc_dev 0 OFF toinb 82004 88398 3 03:08:13 - 0:29 TB_se_ora PROC_STATIC 7 unisfc 0 OFF toinb 87190 55186 0 03:08:15 - 0:00 TB_som PROC_STATIC 7 unisfc 0 OFF toinb 88398 1 0 03:08:13 - 0:01 TB_svcd unisfc SE -------------------------------------------------------------------------------------------------- [svc_main] int service_main (TB_SESSION_PGV *spgv) { /*-----------------------------------------------------------* * Starting EVENT *-----------------------------------------------------------*/ if (TB_on_work(spgv) == TB_FAIL) return (TB_on_error(spgv)); return (TB_SUCC); } [event] /* 상기 프로그램에 대한 저작권을 포함한 지적재산권은 삼성SDS(주)에 있으며, 삼성SDS(주)가 명시적으로허용하지 않은 사용, 복사, 변경, 제3자에의 공개, 배포는 엄격히 금지되며, 삼성SDS(주)의 지적재산권 침해에 해당됩니다. (Copyright ⓒ 2007 Samsung SDS Co., Ltd. All Rights Reserved| Confidential) You are strictly prohibited to copy, disclose, distribute, modify, or use this program in part or as a whole without the prior written consent of Samsung SDS Co., Ltd. Samsung SDS Co., Ltd., owns the intellectual property rights in and to this program. (Copyright ⓒ 2007 Samsung SDS Co., Ltd. All Rights Reserved| Confidential) Program ID : SVC_PureDirect_Rate.c Program Name : 직통율 Programer : Crystal.Park Create Date : 2007.01.02 Update Date : 2007.05.17 by Crystal.Park(개발번호 I20070511-003 에 의거) */ TB_BOOL SVC_PureDirect_Rate_TB_on_work ( TB_SESSION_PGV *spgv ) { EXEC SQL BEGIN DECLARE SECTION; double Temp_rate; char sqlstmt[4096]; EXEC SQL END DECLARE SECTION; char Screen_chk, Tube_chk, Coating_chk, Itc_chk, Total_chk; Q_good_old = 1; S_rate = 1; T_rate = 1; C_rate = 1; I_rate = 1; Screen_chk = 'N'; Tube_chk = 'N'; Coating_chk = 'N'; Itc_chk = 'N'; Total_chk = 'N'; memset(sqlstmt, NULL, sizeof(sqlstmt)); sprintf(sqlstmt, "%s\n SELECT A.I_PROCESS, ", sqlstmt); sprintf(sqlstmt, "%s\n C.F_CONTROL_1, ", sqlstmt); sprintf(sqlstmt, "%s\n C.S_ORDER, ", sqlstmt); sprintf(sqlstmt, "%s\n SUM(Q_GOOD) + SUM(Q_DEFECT) Q_WORK, ", sqlstmt); sprintf(sqlstmt, "%s\n SUM(Q_GOOD_1ST) Q_GOOD, ", sqlstmt); sprintf(sqlstmt, "%s\n SUM(Q_INPUT_1ST+Q_INPUT_2ND+Q_INPUT_3RD+Q_INPUT_4TH+Q_INPUT_5TH) Q_INPUT, ", sqlstmt); sprintf(sqlstmt, "%s\n ROUND(DECODE(SUM(Q_INPUT_1ST+Q_INPUT_2ND+Q_INPUT_3RD+Q_INPUT_4TH+Q_INPUT_5TH),0,0,SUM(Q_GOOD_1ST) /SUM(Q_INPUT_1ST+Q_INPUT_2ND+Q_INPUT_3RD+Q_INPUT_4TH+Q_INPUT_5TH)) ,4) ", sqlstmt); sprintf(sqlstmt, "%s\n FROM RPPOPA02 A, RPMASA24 B, RPMASA05 C ", sqlstmt); sprintf(sqlstmt, "%s\n WHERE A.D_WORK_D between '%s' AND '%s' AND ", sqlstmt,As_start_date,As_end_date); sprintf(sqlstmt, "%s\n A.I_PLANT = '%s' AND ", sqlstmt,As_plant); sprintf(sqlstmt, "%s\n A.I_FACTORY = NVL('%s',A.I_FACTORY) AND ", sqlstmt,As_factory); sprintf(sqlstmt, "%s\n A.I_LINE = NVL('%s',A.I_LINE) AND ", sqlstmt,As_line); sprintf(sqlstmt, "%s\n B.I_INCH = NVL('%s',B.I_INCH) AND ", sqlstmt,As_inch); if(strcmp(As_prod_kind,"Z") == 0){ sprintf(sqlstmt, "%s\n B.I_PROD_KIND NOT IN ('M','*') AND ", sqlstmt,As_prod_kind); }else{ sprintf(sqlstmt, "%s\n B.I_PROD_KIND = NVL('%s',B.I_PROD_KIND) AND ", sqlstmt,As_prod_kind); } if(strcmp(AS_MULTI_PROD_TYPE,"Y") == 0) { sprintf(sqlstmt, "%s\n I_PROD_TYPE NOT IN ('%s') AND ", sqlstmt,As_prod_type); } else{ sprintf(sqlstmt, "%s\n I_PROD_TYPE = NVL('%s', I_PROD_TYPE) AND ", sqlstmt,As_prod_type); } if(strcmp(AS_MULTI_PROD_GRP,"Y") == 0) { sprintf(sqlstmt, "%s\n B.I_PROD_GRP NOT IN ('%s') AND ", sqlstmt,As_prod_grp); } else{ sprintf(sqlstmt, "%s\n B.I_PROD_GRP = NVL('%s',B.I_PROD_GRP) AND ", sqlstmt,As_prod_grp); } sprintf(sqlstmt, "%s\n DECODE(I_PROD_TYPE, 'N','N','S','N', 'G','G','P') LIKE NVL('%s','%c') AND ", sqlstmt,As_s_type,'%'); sprintf(sqlstmt, "%s\n A.I_PLANT = B.I_PLANT AND ", sqlstmt); sprintf(sqlstmt, "%s\n A.I_PROCESS = B.I_PROCESS AND ", sqlstmt); sprintf(sqlstmt, "%s\n A.I_PRODUCT = B.I_PRODUCT AND ", sqlstmt); sprintf(sqlstmt, "%s\n A.I_PLANT = C.I_PLANT AND ", sqlstmt); sprintf(sqlstmt, "%s\n A.I_PROCESS = C.I_PROCESS AND ", sqlstmt); sprintf(sqlstmt, "%s\n C.F_CONTROL_1 IN ('S','T','C','I') AND ", sqlstmt); sprintf(sqlstmt, "%s\n A.I_PROCESS NOT IN ('039') ", sqlstmt); sprintf(sqlstmt, "%s\n GROUP BY A.I_PROCESS, C.F_CONTROL_1, C.S_ORDER ", sqlstmt); sprintf(sqlstmt, "%s\n ORDER BY S_ORDER ASC ", sqlstmt); TBL_Prn (tb_stderr, "%s",sqlstmt); EXEC SQL PREPARE DIRECT FROM :sqlstmt; EXEC SQL declare CUR_DIRECT cursor for DIRECT; EXEC SQL OPEN CUR_DIRECT; EXEC SQL FETCH CUR_DIRECT INTO :I_process, :F_control, :S_order, :Q_work, :Q_good, :Q_input, :Q_good_r; for ( ; ; ) { if (TBL_ERROR_CODE != 0) break; /* Crystal.Park(개발번호 I20070511-003 에 의거) 前공정 양품수 대비 당공정의 투입수가 30% 미만일 때는 직통율 산출에서 제외 */ if ((Q_good_old * 0.3 <= Q_work) && (Q_good > 0)){ if((Q_good != 0) && (Q_work != 0)){ if(Q_good_r > 1 ) Q_good_r = 1 ; if (strncmp(F_control, "S", 1) == 0) { TBL_Prn (tb_stderr, "111.S_rate:%f Q_good_r:%f\n",S_rate, Q_good_r); S_rate = S_rate * Q_good_r; Screen_chk = 'Y'; TBL_Prn (tb_stderr, "222.S_rate:%f \n",S_rate); } else if (strncmp(F_control, "T", 1) == 0) { T_rate = T_rate * Q_good_r; Tube_chk = 'Y'; } else if (strncmp(F_control, "C", 1) == 0) { C_rate = C_rate * Q_good_r; Coating_chk = 'Y'; } else if (strncmp(F_control, "I", 1) == 0) { I_rate = I_rate * Q_good_r; Itc_chk = 'Y'; } Q_good_old = Q_good; } } TBL_Prn (tb_stderr, "S_rate:%f , T_rate:%f, C_rate:%f, I_rate:%f\n",S_rate,T_rate,C_rate,I_rate); EXEC SQL FETCH CUR_DIRECT INTO :I_process, :F_control, :S_order, :Q_work, :Q_good, :Q_input, :Q_good_r; } EXEC SQL CLOSE CUR_DIRECT; if ( Screen_chk == 'Y' ) { sprintf(Screen_Rate,"%10.2f\n",S_rate * 100); } else { sprintf(Screen_Rate,"%10.2f\n",0); } if ( Tube_chk == 'Y' ) { sprintf(Tube_Rate,"%10.2f\n",T_rate * 100); } else { sprintf(Tube_Rate,"%10.2f\n",0); } if ( Coating_chk == 'Y' ) { sprintf(Coating_Rate,"%10.2f\n",C_rate * 100); } else { sprintf(Coating_Rate,"%10.2f\n",0); } if ( Itc_chk == 'Y' ) { sprintf(Itc_Rate,"%10.2f\n",I_rate * 100); } else { sprintf(Itc_Rate,"%10.2f\n",0); } /******* SDIB Custom. 2007.05.28 by M.S.A.*****/ if(S_rate == 0){ S_rate = 1; }else if(T_rate == 0){ T_rate = 1; }else if(C_rate == 0){ C_rate = 1; }else if(C_rate == 0){ I_rate = 1; } /**********************************************/ sprintf(Total_Direct_Rate,"%10.2f\n",S_rate * T_rate * C_rate * I_rate * 100); TBL_send_row(); return (TB_SUCC); } [log] GetReq ret[1], svc_name[SVC_Direct_Rate],control[O:output=out], protocol[2220] COMMIT COMMUNICATE FINISH GetReq ret[1], svc_name[SVC_PureDirect_Rate],control[O:output=out], protocol[2220] [07/08/31-03:30:32 SVC_PureDirect_Rate(77)] [07/08/31-03:30:32 SVC_PureDirect_Rate(135)] [07/08/31-03:30:32 SVC_PureDirect_Rate(138)] [07/08/31-03:30:32 SVC_PureDirect_Rate(152)] [07/08/31-03:30:32 SVC_PureDirect_Rate(135)] [07/08/31-03:30:32 SVC_PureDirect_Rate(138)] [07/08/31-03:30:32 SVC_PureDirect_Rate(152)] [07/08/31-03:30:32 SVC_PureDirect_Rate(135)] [07/08/31-03:30:32 SVC_PureDirect_Rate(138)] [07/08/31-03:30:32 SVC_PureDirect_Rate(152)] [07/08/31-03:30:32 SVC_PureDirect_Rate(135)] [07/08/31-03:30:32 SVC_PureDirect_Rate(138)] [07/08/31-03:30:32 SVC_PureDirect_Rate(152)] [07/08/31-03:30:32 SVC_PureDirect_Rate(152)] [07/08/31-03:30:32 SVC_Pu reDirect_Rate(152)] [07/08/31-03:30:32 SVC_PureDirect_Rate(152)] [07/08/31-03:30:32 SVC_PureDirect_Rate(152)] [07/08/31-03:30:32 SVC_PureDirect_Rate(152)] [07/08/31-03:30:32 SVC_PureDirect_Rate(152)] [07/08/31-03:30:32 SVC_PureDirect_Rate(152)] [07/08/31-03:30:32 SVC_PureDirect_Rate(152)] [07/08/31-03:30:32 SVC_PureDirect_Rate(152)] COMMIT COMMUNICATE FINISH
298 no image Toinb 로그가 남지 않습니다. [1]
관리자
3904 2007-09-01
Tag List
XE Login