안녕하세요.
하루에 한번씩 데이터를 3달전 데이터를 검색하여 update를 해야될일이 생겨서 프로시저를 사용해서 작업을 진행하려고 하고있습니다.
CREATE OR REPLACE PROCEDURE PRO_UPDATE
IS
BEGIN
UPDATE UP_INFO
SET
UP_NM = A
, UP_EMAIL = B
WHERE UP_NM NOT LIKE '%A%'
AND TO_CHAR(DT,'yyyy-mm-dd') <= TO_CHAR(ADD_MONTHS(SYSDATE,-3),'yyyy-mm-dd');
COMMIT;
END PRO_UPDATE
위와같이 프로시저를 만들었는데 일 단위로 실행을 시켜야될꺼 같아 찾아보니 JOB이라는 기능이 있길래 JOB을 활용하여 작업을 하려고
아래와 같이 매일 새벽 1시에 실행되게 JOB을 만들었습니다.
DECLARE
v_jo NUMBER;
BEGIN
DBMS_JOB.SUBMIT(v_jo, 'PRO_UPDATE;', TRUNC(SYSDATE, 'MI')+2/1440, 'TRUNC(SYSDATE)+ 1 + 1/24', FALSE);
COMMIT;
END;
JOB을 테스트 해보려 다음 실행시간을 2분뒤로 바꿔 기다려봤는데 실행이 안되는데 어떤식으로 작업을 해야되나요?
프로시저와 JOB을 처음 써봐서 설명 및 내용이 미흡해서 죄송합니다.
JOB에 대한 건 뒤로하고. 3달 전 데이터라는 게 DT가 3개월 이전일자보다 과거인 값 맞나요? 오늘 수행되면 2019년 7월 24일 이전 데이터 모두 UPDATE?
UPDATE할 데이터 대상도 많을 것 같은데 대상이 맞는지 다시 생각해보셔야할 것 같고요. DT 값이 과거일자로 발생하는 게 아니라면 굳이 3개월 이전 값 모두 UPDATE할 필요는 없을 것 같습니다.
UPDATE할 대상이 많다면 DT에 TO_CHAR를 사용하여 FULL TABLE SCAN으로 UPDATE하는 것도 괜찮겠지만 그게 아니라면
조회되는 컬럼에 함수를 사용하면 성능 저하가 됩니다.
프로시저만 수행했을 때는 잘 수행 되나요?