PL/SQL배치 구현 아이디어를 구해봅니다 0 3 2,407

by 김나영 [PL/SQL] PL SQL [2023.10.14 01:59:41]


안녕하세요

일본에서 근무중인 초보 개발자 입니다

PLSQL도 초보인데 담당하게된 배치 프로그램의 설계가 복잡하여 어찌 구현해야할지 감이 잡히지 않아 질문드립니다

①:테이블A,테이블B를 조인하여 N행의 레코드를 취득

②:①에서 취득한 레코드중 특정칼럼 5개가 동일한 레코드는 UPDATE할 대상에서 전부 제외

③:②처리후 남은 ①레코드를 UPDATE

 

제가 봐도 무슨말인지 잘 이해가 안가지만 지푸라기라도 잡는 심정으로 ㅠㅠ

by pajama [2023.10.14 10:04:28]

샘플 데이터와 중간/최종 결과 예시를 보여주시면 회원님들께서 좀더 구체적으로 도움드릴수 있을겁니다~


by 김나영 [2023.10.14 13:05:27]
답변 감사드립니다!

CURSOR CUR_NAME IS
SELECT 
  B.고객계좌
  A.거래계좌
  A.투자종류
  A.고객등급
  A.투자번호
  A.금액
  A.지불일
  A.개시일
  A.데이터수정횟수
FROM
  TABLE1 A
  (SELECT 
      거래계좌
      투자종류
      지불일
      개시일
      MAX(데이터수정횟수)
   FROM
      TABLE1
   WHERE 
      투자종류 = xx
   GROUP BY
      거래계좌
      투자종류
      지불일
      개시일)
   A_SUB,
   TABLE2 B
WHERE
   A.거래계좌 = A_SUB.거래계좌 AND
   A.투자종류= A_SUB.투자종류 AND
   A.지불일= A_SUB.지불일 AND
   A.개시일= A_SUB.개시일 AND
   A.데이터수정횟수= A_SUB.데이터수정횟수 AND
   A.보조거래계좌= B.보조고객계좌 AND
   A.지불일 > B.특정날짜 AND
   A.개시일 < B.특정날짜
ORDER BY
  A.거래계좌
  A.투자종류,
  A.지불일,
  A.개시일
  

CUR_NAME에 담긴 레코드들중 특정 레코드만 갱신하고 싶은데요

루프 안에서
커서의 n번째 레코드의 특정 컬럼과 n+1째 레코드의 특정 컬럼을 비교해서
동일할 경우 *업데이트 제외 데이터* 에 저장
다를 경우 **업데이트 대상 데이터**에 저장

커서의 n+1 레코드의 특정 컬럼과 n+2 레코드의 특정 컬럼을 비교해서
동일할 경우 *업데이트 제외 데이터* 에 저장
다를 경우 *업데이트 제외 데이터* 와 일치하지 않는지 확인후 
 **업데이트 대상 데이터**에 저장

레코드의 마지막까지 확인후 
 **업데이트 대상 데이터**를 가지고 업데이트를 실시하고 싶은데요

커서의 n번째 레코드의 특정 컬럼과 n+1레코드의 특정컬럼을 어떻게 추출해야 하는지
커서에서 추출한 레코드 
*업데이트 제외 데이터* 
 **업데이트 대상 데이터**를 어떤 데이터 타입에 어떻게 담아야 하는지
모르겠습니다.

PL/SQL로 구현이 가능하다면
이미지나 힌트(검색어)를 부탁드립니다...ㅜㅜ
 


by pajama [2023.10.14 18:07:17]

n번째 레코드의 특정 컬럼과 n+1레코드의 특정컬럼을 비교하신다면 LAG/LEAD 함수를 사용해보시는게 어떨까 싶은데요.

아래 글 우선 참고해보시기 바랍니다~

http://www.gurubee.net/lecture/2674

http://www.gurubee.net/lecture/2675

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입