안녕하세요. 프로시저 관련 잡스케줄에 대해 질문입니다. 1 6 3,880

by 바나나킥 [PL/SQL] JOB PROCEDURE PARAMETER [2014.06.02 15:59:00]


EXEC PROCEDURE_A (MASTER_NUMBER.NEXTVAL, 01, '탱크', -10, 42, 'Y');
EXEC PROCEDURE_B (SYSDATE, 01, -15, 0, NULL, NULL);
EXEC PROCEDURE_C (01);

EXEC PROCEDURE_A (MASTER_NUMBER.NEXTVAL, 02, '자동차', 12, 26, 'Y');
EXEC PROCEDURE_B (SYSDATE, 02, 20, 0, NULL, NULL);
EXEC PROCEDURE_C (02);

EXEC PROCEDURE_A (MASTER_NUMBER.NEXTVAL, 03, '비행기', 5, 15, 'Y');
EXEC PROCEDURE_B (SYSDATE, 03, 13, 0, NULL, NULL);
EXEC PROCEDURE_C (03);

EXEC PROCEDURE_A (MASTER_NUMBER.NEXTVAL, 01, '탱크2', -10, 0, 'Y');
EXEC PROCEDURE_B (SYSDATE, 01, 2, 0, NULL, NULL);
EXEC PROCEDURE_C (01);

EXEC PROCEDURE_A (MASTER_NUMBER.NEXTVAL, 02, '자동차2', 17, 28, 'Y');
EXEC PROCEDURE_B (SYSDATE, 02, 8, 0, NULL, NULL);
EXEC PROCEDURE_C (02);

EXEC PROCEDURE_A (MASTER_NUMBER.NEXTVAL, 03, '비행기2', 17, 28, 'Y');
EXEC PROCEDURE_B (SYSDATE+1, 03, 8, 0, NULL, NULL);
EXEC PROCEDURE_C (03);

------------------------------------------------------------------------------------------------------------

 

안녕하세요.

파라미터 값이 있는 프로시저를 이용한 잡스케쥴링에 대해 질문드립니다...

 

제가 지금 막히는 부분이..

위의 쿼리를 보시면 아시겠지만 세줄씩 띄어져 있습니다.

저 세줄을 한묶으로 보고

하나하나 잡스케줄러를 이용하여

1분마다 한 묶음씩 실행시키고 싶은데요..(파라미터 값이 각기 다릅니다.)

어떤식으로 잡을 등록하는게 나을까요?? 감이 안잡힙니다...

by 아발란체 [2014.06.02 16:10:06]

인자 값이 어떻게 들어오냐에 따라 다른 것 같습니다.

1분 마다 수시로 바뀌는 인자 값이 어플리케이션에서 전달하는 것이면

어플에서 프로시저를 호출하는 구조로 가야 될 것 같고요,

이 경우 DB Job가 무관하게 되고, 일정 시간 간격 수행은 어플에서 수행이 되어야 할 것 같습니다.

인자 값을 1분 간격으로 던지는 것이 어플인데 DB Job으로 처리하게 되면 복잡도가 2배로 될거 같습니다.

이런 경우가 아니라면

DB에서 1분 단위로 바뀌는 인자 값 발생 기준이 무엇인지 단서가 필요해보입니다.

이게 중요하지 않다면 그냥  3줄을 묶음으로 프로시저 하나 만들고

job으로 그 프로시저 콜만 해주는 구조로 가면 될 것 같습니다.

 

job과 procedure는 각 키워드로 검색하면 만드는 강좌가 많이 있습니다.


by 바나나킥 [2014.06.02 16:18:55]

인자 값을 어플리케이션에서 전달하는 것은 아니고 순수 DB테이블 내에서만 전달하는 것입니다.

 

그렇게 되면 세줄씩 묶어서 프로시저를 생성한 후에

각 프로시저를 생성하는 여러 개의 잡을 만들어야하는건가요??


by 아발란체 [2014.06.02 16:36:05]

인자 값이 테이블에서 관리되고 있다면

프로시저는 1개만 만들면 됩니다. (3줄)

잡 역시 1개만 만들어 1분 단위로 실행하게 설정만 하고 실행 할 대상으로 만든 프로시저명을 넣으면 됩니다.

단 프로시저가 호출 될 때마다 시퀸스넘버를 업데이트 하여 1분 마다 다른 인자 값을 가지고 오도록 Data Access Point를 변경해주면 될 것 같습니다.

 


by 바나나킥 [2014.06.02 16:41:59]

답변 감사드립니다.

프로시저의 인자 값들은 테이블에 INSERT 시키는 용도로만 쓰이는데요.

1분 마다 다른 인자 값을 가지고 오도록 하는 DATA ACCESS POINT가 어떤건지 감이 잘 안오네요..

 


by 아발란체 [2014.06.02 17:11:59]

인자 값이 테이블에 있다면

1분 단위로 같은 값을 빼면 안되잖아용.

1분 단위로 실행 할 때마다 다른 값을 빼야 하는데 다른 값을 빼려면 실행 할 때마다

다른 값을 가지고 오도록 변하는 기준이 있어야 하는데

오라클 Sequence(=Procedure)가 대안이 될 수 있는 것 같습니다.

 

만든 PROCEDURE 내용 :::

SELECT val1, val2, val3, val4 INTO val1, val2, val3, val4 FROM 인자_테이블 WHERE unique_id = [SEQUENCE_NAME].NEXTVAL AND ROWNUM = 1;

EXEC PROCEDURE_A (MASTER_NUMBER.NEXTVAL, val1, val2, val3, val4...);
EXEC PROCEDURE_B (SYSDATE, val1, val2, val3, NULL, NULL);
EXEC PROCEDURE_C (val3);
 
SELECT [SEQUENCE_NAME].CURRVAL INTO temp FROM DUAL;
 
if(temp  > 인자값테이블레코드수) {
   sequence 값 초기화 처리
}
 
식으로요.. 예를 한 가지 든 것입니다.
이 프로시저를 잡에서 1분 단위로 실행하게 만들어야겠죠.. ^^;

by 바나나킥 [2014.06.02 17:28:26]

감사합니다! 한번 해보겠습니다. 이제 좀 감이 오는 것 같네요!^^

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