오라클 데이터의 날짜 기준으로 update 실행하기 0 0 1,799

by 김태민 [PL/SQL] 배치 스케쥴러 예약 [2018.12.04 13:00:47]


안녕하세요.

이 작업이 가능한지도 모르겠습니다ㅠ. 혹시나 가능할까하여 도움부탁드립니다.

● 수행목표 : 공고의 신청마감일에 신청서 접수번호 부여.

● 테이블 명세 :

1. TBL_NOTICE 공고테이블

CREATE TABLE "TBL_NOTICE" (
  "NOTICE_ID"      NUMBER                 NOT NULL, 
  "NOTICE_END_DAY"      VARCHAR2(50 BYTE)          NULL , 
  "NOTICE_END_HOUR"      VARCHAR2(50 BYTE)          NULL, 
  "NOTICE_END_MIN"      VARCHAR2(50 BYTE)          NULL, 
  "NOTICE_CODE1"      VARCHAR2(50 BYTE)          NULL, 
  "NOTICE_CODE2"      VARCHAR2(50 BYTE)          NULL
)

 

2. TBL_APPLY 신청서 테이블

CREATE TABLE "TBL_APPLY" (
  "APPLY_ID"      NUMBER                 NOT NULL,
  "NOTICE_ID"      NUMBER                 NOT NULL 
  )

 

3. TBL_APPLY_MAPPING 신청서매핑 테이블

CREATE TABLE "TBL_APPLY_MAPPING" (
  "APPLY_ID"      NUMBER                 NOT NULL ,
  "APPLY_NUM"  VARCAHR2(20)      NOT NULL
  )

 

● 용어정리

신청마감일 :

TBL_NOTICE.NOTICE_END_DAY + " " + TBL_NOTICE.NOTICE_END_HOUR + ":" + TBL_NOTICE_END_MIN

EX) 2018-12-04 16:05

 

접수번호규칙 :

TBL_NOTICE.NOTICE_CODE1 + "_" + TBL_NOTICE.NOTICE_CODE2 + "_" + 0000 ~

TBL_NOTICE.NOTICE_CODE1 + "_" + TBL_NOTICE.NOTICE_CODE2 + "_" + 9999

EX) CODE1VALUE_CODE2VALUE_0001 ~ CODE1VALUE_CODE2VALUE_9999

 

● 상세수행목표 : 

1. TBL_NOTICE에 있는 데이터의 신청마감일에 TBL_APPLY_MAPPING.APPLY_NUM을 변경하는 UPDATE문이 실행되어야 합니다.

2. TBL_NOTICE.NOTICE_ID를 FK로 TBL_APPLY의 데이터가 생성됩니다. 그리고 TBL_APPLY.APPLY_ID를 FK로 TBL_APPLY_MAPPING이 생성됩니다. 즉, TBL_NOTICE의 데이터가 갖는 신청마감일에 해당 데이터의 NOTICE_ID를 FK로 갖는 모든 데이터에 UPDATE가 실행됩니다.

3. 접수번호는 0000 ~ 9999 까지의 숫자를 중복되지 않게 입력합니다.

4. TBL_NOTICE.NOTICE_CODE1과 TBL_NOTICE.NOTICE_CODE2가 동일한 데이터가 있으면 접수번호의 숫자를 그 뒤부터 이어서 입력합니다.

ex) 

NOTICE_ID NOTICE_END_DAY NOTICE_END_HOUR NOTICE_MIN NOTICE_CODE1 NOTICE_CODE2
100 2018-12-05 18 00 CODE1VALUE CODE2VALUE
101 2019-02-20 18 30 CODE1VALUE CODE2VALUE

NOTICE_ID가 100인 데이터와 NOTICE_ID가 101인 데이터의 NOTICE_CODE1과 NOTICE_CODE2가 모두 동일합니다.

이경우 NOTICE_ID가 100인 데이터의 접수번호를 CODE1VALUE_CODE2VALUE_0000부터 CODE1VALUE_CODE2VALUE_1399 까지 사용했다면

NOTICE_ID가 101인 데이터의 접수번호는 CODE1VALUE_CODE2VALUE_1400부터 부여합니다.

 

 

이 문제를 어떻게 풀어야할지 머리가 아파서 설명이 부족했을지도 모르겠습니다. 

댓글 남겨주시면 더 상세히 설명드리겠습니다.

도움 부탁드립니다.

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