2013-08-11 3 views
0

이 코드는 제거 프로그램입니다. 우리는 아무 것도 주문하지 않은 고객을 제거하려고합니다 (회사에서 잠재적 인 고객 인 경우 기록을 유지합니다).프로덕션 마스터 테이블에서 레코드를 삭제해야합니다.

이것은 테스트 환경에서는 처음 실행되지만 결국에는 생산에 영향을 미칩니다. 생성 된 임시 파일은 백업으로 유지합니다. 삭제하는 방법을 모르겠습니다. 나는이 시점에서 필요하다 생각 :

FXRCMASAC IF E    DISK        
    * Order Header file - Keyed by Company and entity number  
FOEORH4 IF E   K DISK        
FTRCMA1 UF A E   K DISK         
* Customer Keycode BI file           
FZRCST1 IF E   K DISK         
* Output file - Customers who have no Keycode - VRCSTKBI PF  
FVRCST1 UF A E   K DISK         
* Address Master file - xDRESSAD PF        
FXDRES1 IF E   K DISK         
* Output file - Address - ZDRESSAD PF        
FZDRES1 UF A E   K DISK         

*----------------------------------------------------------------- 
* Calculation Specification          
*----------------------------------------------------------------- 
* Step 1               
C     READ  xRCMASAC        
C     DOW  NOT %EOF        
*                 
* Check the record does not exist in order header file    
C     EXSR  CHKORH_SR        
C     READ  xRCMASAC       
C     ENDDO           

* Step 2 and 3             
C  *LOVAL  SETLL  TRCMA1        
C     READ(N) TRCMA1        
C     DOW  NOT %EOF       
* limit number of records for test        
c  counta  ifge  9000        
C     EVAL  *INLR = *ON       
c     leave           
c     endif           
c  countz  ifge  9000        
C     EVAL  *INLR = *ON       
c     leave           
c     endif           
* Check the record does not exist in stock header file   
C     EXSR  CHKCUS_SR       
*                
C     EXSR  CHKADR_SR        
*                  
* Read the next record            
C     READ(N) TRCMA1         
C     ENDDO            

*----------------------------------------------------------------- 
* End of the Program             
*----------------------------------------------------------------- 
C     EVAL  *INLR = *ON        

*----------------------------------------------------------------- 
* Check the order header entity          
*----------------------------------------------------------------- 
C  CHKORH_SR  BEGSR            
*                  
C  ORHKEY  CHAIN  OEORH4         
* If the order entity is notfound, write the rec into TRCMASAC file 
C     IF  NOT %FOUND(OEORH4)      
C     WRITE  TRCMASRR       
C     ENDIF           
*                 
C     ENDSR           
*----------------------------------------------------------------- 
* Check the customer keycode entity         
*----------------------------------------------------------------- 
C  CHKCUS_SR  BEGSR           
*                 
C  ORHKEY  CHAIN  ZRCST1         
* If the order entity is found, write the rec into VRCSTKBI file 
C     IF  %FOUND(ZRCST1)       
C     WRITE  VRCSTKRR        
c     add  1    countz   500 
C     ENDIF           
*                 
C     ENDSR           

*----------------------------------------------------------------- 
* Check the address entity for records of never ordered    
C  CHKADR_SR  BEGSR           
*                 
C  ACENT#  CHAIN  ADRES1        
* If the order entity is found, write the rec into ZDRESSRR file 
C     IF  %FOUND(ADRES1)      
C     WRITE  ZDRESSRR        
c     add  1    counta   500 
C     ENDIF           
*                 
C     ENDSR           

*---------------------------------------------------------------- 
* Program Initialization Subroutine        
*---------------------------------------------------------------- 
C  *INZSR  BEGSR           
*                 
* ORDER HEADER KEYLIST           
C  ORHKEY  KLIST           
C     KFLD     ACCOM#     
C     KFLD     ACENT#     

c     z-add  0    counta    
c     z-add  0    countz    
*                
* Clear TRCMASAC file data          
C  *LOVAL  SETLL  TRCMA1        
C     READ  TRCMA1        
C     DOW  NOT %EOF       
C     DELETE TRCMASRR       
* Read the next record           
C     READ  TRCMA1        
C     ENDDO           
*                
* Clear VRCSTKBI file data          
C  *LOVAL  SETLL  VRCST1        
C     READ  VRCST1        
C     DOW  NOT %EOF       
C     DELETE VRCSTKRR       
* Read the next record           
C     READ  VRCST1        

C     ENDDO      
*            
* Clear ZDRESSAD file data      
C  *LOVAL  SETLL  ZDRES1   
C     READ  ZDRES1   
C     DOW  NOT %EOF   
C     DELETE ZDRESSRR   
* Read the next record       
C     READ  ZDRES1   
C     ENDDO 
* 
C     ENDSR 

답변

2

예, 당신이 후 기록을 삭제합니다 : 주문 엔티티가 발견되지 않는 경우, TRCMASAC 파일 여기

C     IF  NOT %FOUND(OEORH4) 
C     WRITE  TRCMASRR 
* Delete? file name or format name 

에 기록을 쓰기는 코드의 TRCMASRR에 사본을 쓰기 :

C     DELETE OEORH4R 
당신은 레코드 형식의 이름이 아닌 파일 이름을 삭제하는 것이 좋습니다

. 위의 코드에서 OEORH4의 레코드 형식 이름은 OEORH4R이라고 가정했습니다.

내 생각에 삭제하려는 고객 레코드와 관련된 모든 주소 등을 삭제하는 것이 좋습니다. 그렇지 않으면 "고아"를 갖게됩니다 ...

또한 *INZSR에서 파일을 더 효율적으로 삭제하는 것이 좋습니다. 이 같은 TRCMA1, VRCST1ZDRES1USROPN 파일을 확인하십시오

FTRCMA1 UF A E   K DISK USROPN 
FVRCST1 UF A E   K DISK USROPN 
FZDRES1 UF A E   K DISK USROPN 

를 한 후 실행 QCMDEXC을 사용하십시오 CLRPFM *LIBL/TRCMA1, CLRPFM *LIBL/VRCST1CLRPFM *LIBL/ZDRES1. 그리고 이후에 모든 파일 세 개를 OPEN 개 가지고 있어야합니다.

각 레코드를 개별적으로 삭제하는 것보다 빠르기 때문에 파일 설정 방법에 따라 다른 이점도 있습니다.

+1

완전성을 위해 [DELETE] (http://pic.dhe.ibm.com/infocenter/iseries/v6r1m0/topic/rzasd/sc092508935.htm)에 대한 RPG 매뉴얼 참조 서가 나와 있습니다. –