DBMS_JOB 패키지 사용시 INTERVAL 파라미터는 해당 JOB이 실행되면서 다음 실행될
시점을 계산하기 위해서 평가됩니다. 따라서 임의의 시점에서 계산되어도 동일한
결과를 낼 수 있는 Expression을 지정해야만 합니다.
즉, 님이 생각하시는 것처럼 SUBMIT 시에 평가되는 것이 아니라는 것입니다. 따라서
매개변수 전달은 불가능합니다.
일단 올려주신 샘플만 가지고는 정확히 뭘 하실려는 것인지 알수가 없군요.
매번 SUBMIT을 할 때마다 새로운 JOB이 생성되기 때문에 님과 같은 방식으로 코딩하
는 경우 계속 새로운 JOB을 등록하게 될 겁니다.
원하시는게 그것인지요?
만약 시간주기를 변경하기를 원하신다면 DBMS_JOB.INTERVAL() 프로시져를 쓰실 수 있을
것이고 실행할 프로시져를 변경하기를 원하신다면 DBMS_JOB.WHAT() 프로시져를 쓸 수
있습니다. 또한 해당 프로시져의 작동을 중단하시기를 원한다면 BROKEN() 프로시져를
쓰실 수 있겠지요.
일단은 어떤 목적으로 쓰시려고 하는지 모르겠네요. 얼핏 생각에는 특정 시점에 한번
만 수행할 프로시져 같기도 한데 그렇다면 JOB은 그다지 적합하지는 않습니다.
실행하고 나서 자기 자신을 BROKEN() 시켜줄 필요가 있겠지요.
>>류광섭 님께서 쓰시길<<
:: 오라클 테이블
:: create table temp_table (
:: NUM_COL NUMBER(10),
:: CHAR_COL CHAR(30)
:: );
:: create table test_yymmdd(
:: HHMI CHAR(12)
:: );
::
:: CREATE OR REPLACE PROCEDURE Temp
:: AS
:: v_hour number(2);
:: v_min number(2);
:: v_jobNum number(3);
::
:: begin
:: select substr(hhmi, 9, 2) into v_hour from test_yymmdd;
:: select substr(hhmi, 11, 2) into v_min from test_yymmdd;
:: insert into temp_table(num_col, char_col) values (temp_seq.nextval, TO_CHAR(sysdate, 'yyyy-mm-dd
:: hh24:mi:ss'));
:: commit;
:: end Temp;
::
::
:: BEGIN
:: DBMS_JOB.SUBMIT(:v_jobNum, 'Temp;', SYSDATE, 'sysdate+( :v_hour/24)');
:: END;
::
:: 위와 같이 실행했을때
:: DB 에서 뽑아온 시간으로 실행을 하고 싶은데..
:: 잘 되지 않습니다.
:: 현재 변수 넘겨주는게 제대로 되질 않아서.. 그런것 같은데..
::
:: :v_hour 부분을 숫자로 대치하면 잘 작동합니다.
::
:: 도움을 부탁드리겠습니다.
:: 감사합니다.
:: 그럼.
::
::
|