2009-11-20 6 views
2

주어진 날짜에 데이터베이스 개체를 삭제하는 작업을 생성하려고합니다. 작업은 괜찮아졌지만 절차는 실행되지 않습니다. 절차 만 실행하면 작동합니다.DBMS_SCHEDULER.CREATE_JOB 프로 시저로 프로 시저를 실행하는 방법

여기에 작업 v_delhrs 숫자입니다

v_jobnam := v_objnam; 
       v_jobnam := DBMS_SCHEDULER.generate_job_name (v_jobnam); 

v_startdate := to_timestamp(v_startdate); 
    select sysdate + (v_delhrs/1440) 
     into v_startdate 
     from dual; 

DBMS_SCHEDULER.CREATE_JOB(job_name => v_jobnam, job_type => 'PLSQL_BLOCK', JOB_ACTION => 'BEGIN DROP_OBJ1(' || v_objnam|| ', ' || v_objtyp || ', '|| v_schema || ',' || v_objid ||'); END;', start_date => SYSTIMESTAMP, repeat_interval => 'freq=secondly; bysecond=0', end_date => NULL, enabled => TRUE, comments => 'Calls PLSQL once'); 

을 생성하는 코드입니다.

PROCEDURE DROP_OBJ1 
    (
     p_objnam  IN CHAR, 
     p_objtyp  IN CHAR, 
     p_copyto  IN ALL_OBJECTS.OWNER%TYPE, 
     p_objid  IN NUMBER 
    ) 
    IS 

     v_objnam  VARCHAR2 (30); 
     v_objtyp  VARCHAR2 (30); 
     v_copyto  VARCHAR2 (30); 
     v_objid  NUMBER (3); 


    BEGIN 

      v_objnam := UPPER (p_objnam); 
      v_objtyp := UPPER (p_objtyp); 
      v_copyto := UPPER (p_copyto); 
      v_objid := p_objid; 
      --v_copyby := UPPER (p_copyby); 

      EXECUTE IMMEDIATE (' DROP ' 
           || v_objtyp 
           || ' ' 
           || v_copyto 
           || '.' 
           || v_objnam 
           ); 

      EXECUTE IMMEDIATE (' DELETE FROM COPY_OBJ_DET WHERE OBJ_ID = ' 
           || v_objid 
           ); 


     COMMIT; 

    END; 

나는 그것의 아주 사소한 문제를 알고 다음은 프로 시저에 대한 코드입니다. 사전에 고마워, .

건배!

답변

6

DBMS_JOBS 설치 호출에서 일부 인용 부호가 누락되었습니다. 이것이 내가 데이터베이스에 설치 코드를 것이다 솔루션이없는 경우

DBMS_SCHEDULER.CREATE_JOB(job_name  => v_jobnam, 
          job_type  => 'PLSQL_BLOCK', 
          JOB_ACTION  => 'BEGIN DROP_OBJ1(''' || v_objnam 
              || ''', ''' || v_objtyp || ''', ''' 
              || v_schema || ''',' || v_objid 
              || '); END;', 
          start_date  => SYSTIMESTAMP, 
          repeat_interval => 'freq=secondly; bysecond=0', 
          end_date  => NULL, 
          enabled   => TRUE, 
          comments  => 'Calls PLSQL once'); 

을하고 그것을 자신을 시도 :

이보십시오.

+0

많은 감사합니다. 사이에, 실제로 항해 보트에서 살고 있습니까? 감사합니다. 내 하루를 보냈습니다. 건배! – Tunde

+0

예 - 2 년 전에 소프트웨어 회사를 매각했습니다. 우리는 동쪽 비용과 바하마를 위아래로왔다. 나는 50 피트 범선에 아름다운 아내와 2 명의 멋진 아이들과 살고 있습니다. –

+0

user_scheduler_jobs 뷰 (또는 all_scheduler_jobs)를보고 작업 데이터가 예상 한 것과 같은지 확인할 수 있습니다 –