필자의 요구 사항은 중복 전화 번호 (잘못된 전화 번호, 하드 코드 된 16 개의 전화 번호 세트)가있는 db2 테이블에서 데이터를 삭제하는 것입니다. 그리고 하나의 전화 번호가 유지되어야합니다. 시퀀스 번호 (최소값).cobol에서 DB2/커서 프로그램 작동
는 기본 테이블 데이터를 다음했다 고려해 PHONE_TAB
Client_Id Phone_num Seq_num
1234 45678 15 --- delete
4444 55555 45
1234 45678 10 ---should be retained
5555 22222 25
1234 45678 20 --- delete
1234 45678 11 --- delete
참고 : 또한 내가 백업을 수행하기 삭제하기 전에 출력 테이프 파일에 삭제됩니다 행을 이동해야합니다.
는 커서를 선언, 아래의 논리로 올라와있다 :
EXEC SQL
DECLARE CUR1 CURSOR WITH HOLD FOR
SELECT * FROM PHONE_TAB WHERE PHONE_NUM = 45678
END-EXEC
FETCH-PARA
EXEC SQL
FETCH CUR1 INTO :DCLGEN_CLIENT_ID
:DCLGEN_PHONE_NUM
:DCLGEN_SEQ_NUM
END-EXEC
VALIDATE-PARA는
EXEC SQL
SELECT MIN(SEQ_NUM) FROM PHONE_TAB
WHERE CLIENT_ID = :DCLGEN_CLIENT_ID
PHONE_NUM = :DCLGEN_PHONE_NUM GROUP BY CLIENT_ID AND PHONE_NUM
INTO WS_MIN
END-EXEC
EVALUATE TRUE
WHEN SEQ_NUM > WS_MIN
PERFORM BACKUP-PARA
WHEN OTHER
PERFORM FETCH-PARA
마지막으로, 삭제-PARA
EXEC SQL
DELETE FROM PHONE_TAB WHERE CURRENT CURSOR
END-EXEC
누군가이 논리가 맞는지 말해 줄 수 있습니까? 의심 할 여지없이 테이프 파일에 백업하지 않고 대량 삭제를 수행 할 것인가?
감사
이유가 이것이 https://stackoverflow.com/questions/47152124/mainframe-cobol-db2-delete-program (다른 정보를 수정해야 할 수도 있음)과 다른 이유를 설명하십시오. –
@SimonSobisch 먼저 편집을 시도했습니다. 같은 질문이지만, 명확하게 할 수는 없습니다! 그것은 내가 여기에 코드를 포함하고 커서의 사용법을 포함하는 방식으로 다르다. – user8898467
@SimonSobisch은 혼란에 사과한다! 흐름을 통해 스택에 새로운 메신저 .. 처음에는 코드와 쿼리를 게시하는 방법을 알지 못했습니다 – user8898467